[06/24] Fix "set enum-command value garbage"

Message ID 20190522205327.2568-7-palves@redhat.com
State New, archived
Headers

Commit Message

Pedro Alves May 22, 2019, 8:53 p.m. UTC
  With enum commands, we currently fail to notice garbage after the
value.

Currently:

  (gdb) set print entry-values compact foo
  (gdb) show print entry-values foo
  Printing of function arguments at function entry is "compact".

After this fix:

 (gdb) set print entry-values compact foo
  Garbage after item: "foo"

gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <palves@redhat.com>

	* cli/cli-setshow.c (do_set_command) <var_enum>: Detect garbage
	after item.
---
 gdb/cli/cli-setshow.c | 4 ++++
 1 file changed, 4 insertions(+)
  

Comments

Sergio Durigan Junior May 23, 2019, 7:13 p.m. UTC | #1
On Wednesday, May 22 2019, Pedro Alves wrote:

> With enum commands, we currently fail to notice garbage after the
> value.
>
> Currently:
>
>   (gdb) set print entry-values compact foo
>   (gdb) show print entry-values foo
>   Printing of function arguments at function entry is "compact".
>
> After this fix:
>
>  (gdb) set print entry-values compact foo
>   Garbage after item: "foo"

I think it would be clearer to specify which item here, otherwise the
user might think that the item is "foo".  Maybe:

  Invalid data after item "compact": "foo"

What do you think?  Otherwise, LGTM.  Thanks.

> gdb/ChangeLog:
> yyyy-mm-dd  Pedro Alves  <palves@redhat.com>
>
> 	* cli/cli-setshow.c (do_set_command) <var_enum>: Detect garbage
> 	after item.
> ---
>  gdb/cli/cli-setshow.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
> index 96d7bf5c3c0..9d6479ffca2 100644
> --- a/gdb/cli/cli-setshow.c
> +++ b/gdb/cli/cli-setshow.c
> @@ -413,6 +413,10 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c)
>  	if (nmatches > 1)
>  	  error (_("Ambiguous item \"%s\"."), arg);
>  
> +	arg = skip_spaces (arg + len);
> +	if (*arg != '\0')
> +	  error (_("Garbage after item: \"%s\""), arg);
> +
>  	if (*(const char **) c->var != match)
>  	  {
>  	    *(const char **) c->var = match;
> -- 
> 2.14.5
  

Patch

diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
index 96d7bf5c3c0..9d6479ffca2 100644
--- a/gdb/cli/cli-setshow.c
+++ b/gdb/cli/cli-setshow.c
@@ -413,6 +413,10 @@  do_set_command (const char *arg, int from_tty, struct cmd_list_element *c)
 	if (nmatches > 1)
 	  error (_("Ambiguous item \"%s\"."), arg);
 
+	arg = skip_spaces (arg + len);
+	if (*arg != '\0')
+	  error (_("Garbage after item: \"%s\""), arg);
+
 	if (*(const char **) c->var != match)
 	  {
 	    *(const char **) c->var = match;