Author: ed
Date: Sun Aug 16 13:59:11 2015
New Revision: 286827
URL: https://svnweb.freebsd.org/changeset/base/286827

Log:
  Pick UINT_MAX / 100 as an upperbound.
  
  The fix that I applied in r286798 is already good, but it assumes that
  sizeof(int) > sizeof(short). Express the upperbound in terms of
  UINT_MAX. By dividing that by 100, we're sure that the resulting value
  is never larger than approximately UINT_MAX / 10, which is safe.
  
  PR:           202326
  Discussed with:       kcwu csie org
  MFC after:    1 month

Modified:
  head/sys/teken/teken.c

Modified: head/sys/teken/teken.c
==============================================================================
--- head/sys/teken/teken.c      Sun Aug 16 12:57:17 2015        (r286826)
+++ head/sys/teken/teken.c      Sun Aug 16 13:59:11 2015        (r286827)
@@ -411,13 +411,16 @@ teken_state_numbers(teken_t *t, teken_ch
                        /* First digit. */
                        t->t_stateflags &= ~TS_FIRSTDIGIT;
                        t->t_nums[t->t_curnum] = c - '0';
-               } else if (t->t_nums[t->t_curnum] < USHRT_MAX) {
+               } else if (t->t_nums[t->t_curnum] < UINT_MAX / 100) {
                        /*
-                        * Screen positions are stored as unsigned
-                        * shorts. There is no need to continue parsing
-                        * input once the value exceeds USHRT_MAX. It
-                        * would only allow for integer overflows when
-                        * performing arithmetic on the cursor position.
+                        * There is no need to continue parsing input
+                        * once the value exceeds the size of the
+                        * terminal. It would only allow for integer
+                        * overflows when performing arithmetic on the
+                        * cursor position.
+                        *
+                        * Ignore any further digits if the value is
+                        * already UINT_MAX / 100.
                         */
                        t->t_nums[t->t_curnum] =
                            t->t_nums[t->t_curnum] * 10 + c - '0';
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to