aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2013-03-22 20:21:48 +0000
committerPedro Alves <palves@redhat.com>2013-03-22 20:21:48 +0000
commit2ce09ced3c676f1ed39a612fdeed4ecfc4623881 (patch)
tree1c0ce711ccf43eb0f9582d8976f8131e2881097d
parent78a095c39e77cb462996a5d7c0438b768b09c7f0 (diff)
downloadgdb-2ce09ced3c676f1ed39a612fdeed4ecfc4623881.zip
gdb-2ce09ced3c676f1ed39a612fdeed4ecfc4623881.tar.gz
gdb-2ce09ced3c676f1ed39a612fdeed4ecfc4623881.tar.bz2
Subject: Fix range validation of integer commands with "unlimited".
The range validation added by http://sourceware.org/ml/gdb-patches/2013-03/msg00767.html Changes things to allow setting the command to INT_MAX or UINT_MAX directly, with signed and unsigned commands respectively. However, that went a little bit too far, as in the cases of var_integer and var_uinteger, those values are actually implementation detail. It's better to not expose them in the interface, and have users assume those values mean "unlimited" too, so to be safer to expand the range of the commands in the future if we want to. Yes, it's pedantic, and it's not likely users actually will do this, but MI frontends and Python scripts might. gdb/ 2013-03-22 Pedro Alves <palves@redhat.com> Yao Qi <yao@codesourcery.com> Mark Kettenis <kettenis@gnu.org> * cli/cli-setshow.c (do_set_command) <var_uinteger>: Don't let the user set the value to UINT_MAX directly. <var_integer>: Don't let the user set the value to INT_MAX directly.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/cli/cli-setshow.c13
2 files changed, 20 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 26dafe9..a4027c9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2013-03-22 Pedro Alves <palves@redhat.com>
+ Yao Qi <yao@codesourcery.com>
+ Mark Kettenis <kettenis@gnu.org>
+
+ * cli/cli-setshow.c (do_set_command) <var_uinteger>:
+ Don't let the user set the value to UINT_MAX directly.
+ <var_integer>: Don't let the user set the value to INT_MAX
+ directly.
+
2013-03-22 Jan Kratochvil <jan.kratochvil@redhat.com>
* remote.c (remote_unpush_target): New function.
diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
index 95ebbe7..81b90e7 100644
--- a/gdb/cli/cli-setshow.c
+++ b/gdb/cli/cli-setshow.c
@@ -278,7 +278,11 @@ do_set_command (char *arg, int from_tty, struct cmd_list_element *c)
if (c->var_type == var_uinteger && val == 0)
val = UINT_MAX;
- else if (val > UINT_MAX)
+ /* For var_uinteger, don't let the user set the value to
+ UINT_MAX directly, as that exposes an implementation detail
+ to the user interface. */
+ else if ((c->var_type == var_uinteger && val >= UINT_MAX)
+ || (c->var_type == var_zuinteger && val > UINT_MAX))
error (_("integer %s out of range"), plongest (val));
if (*(unsigned int *) c->var != val)
@@ -300,7 +304,12 @@ do_set_command (char *arg, int from_tty, struct cmd_list_element *c)
if (val == 0 && c->var_type == var_integer)
val = INT_MAX;
- else if (val > INT_MAX || val < INT_MIN)
+ /* For var_integer, don't let the user set the value to
+ INT_MAX directly, as that exposes an implementation detail
+ to the user interface. */
+ else if ((c->var_type == var_integer && val >= INT_MAX)
+ || (c->var_type == var_zinteger && val > INT_MAX)
+ || val < INT_MIN)
error (_("integer %s out of range"), plongest (val));
if (*(int *) c->var != val)