+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.
 
 
        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)
 
        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)