aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/cli/cli-setshow.c14
2 files changed, 21 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..f612369 100644
--- a/gdb/cli/cli-setshow.c
+++ b/gdb/cli/cli-setshow.c
@@ -278,7 +278,12 @@ 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)
+ else if (val < 0
+ /* 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. */
+ || (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 +305,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)
+ else if (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. */
+ || (c->var_type == var_integer && val >= INT_MAX)
+ || (c->var_type == var_zinteger && val > INT_MAX))
error (_("integer %s out of range"), plongest (val));
if (*(int *) c->var != val)