]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix undefined behavior in TUI's TAB expansion
authorEli Zaretskii <eliz@gnu.org>
Sat, 21 Mar 2015 08:48:34 +0000 (10:48 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 21 Mar 2015 08:51:40 +0000 (10:51 +0200)
gdb/ChangeLog:

* tui/tui-io.c (tui_expand_tabs): Reinitialize the column counter
before the second loop, to avoid undefined behavior.  Reported by
Anton Blanchard <anton@samba.org>.

(cherry picked from commit b1a0f704950296b2363192ba91999eef3635700f)

gdb/ChangeLog
gdb/tui/tui-io.c

index 37a69e89db2e1771139621829e188250a58c84f4..8f95a2add9e18f2bcea054c02c0ae8678a90951d 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-21  Eli Zaretskii  <eliz@gnu.org>
+
+       * tui/tui-io.c (tui_expand_tabs): Reinitialize the column counter
+       before the second loop, to avoid undefined behavior.  Reported by
+       Anton Blanchard <anton@samba.org>.
+
 2015-02-26  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        PR build/18033
index 13cc5fac4e9c58a2ceafaea5cffa70a27b78c034..61a8dafe6b3bc24aad4c5a950ae9cde85697b0c5 100644 (file)
@@ -758,20 +758,20 @@ tui_getc (FILE *fp)
 char *
 tui_expand_tabs (const char *string, int col)
 {
-  int n_adjust;
+  int n_adjust, ncol;
   const char *s;
   char *ret, *q;
 
   /* 1. How many additional characters do we need?  */
-  for (n_adjust = 0, s = string; s; )
+  for (ncol = col, n_adjust = 0, s = string; s; )
     {
       s = strpbrk (s, "\t");
       if (s)
        {
-         col += (s - string) + n_adjust;
+         ncol += (s - string) + n_adjust;
          /* Adjustment for the next tab stop, minus one for the TAB
             we replace with spaces.  */
-         n_adjust += 8 - (col % 8) - 1;
+         n_adjust += 8 - (ncol % 8) - 1;
          s++;
        }
     }
@@ -780,7 +780,7 @@ tui_expand_tabs (const char *string, int col)
   ret = q = xmalloc (strlen (string) + n_adjust + 1);
 
   /* 2. Copy the original string while replacing TABs with spaces.  */
-  for (s = string; s; )
+  for (ncol = col, s = string; s; )
     {
       char *s1 = strpbrk (s, "\t");
       if (s1)
@@ -789,12 +789,12 @@ tui_expand_tabs (const char *string, int col)
            {
              strncpy (q, s, s1 - s);
              q += s1 - s;
-             col += s1 - s;
+             ncol += s1 - s;
            }
          do {
            *q++ = ' ';
-           col++;
-         } while ((col % 8) != 0);
+           ncol++;
+         } while ((ncol % 8) != 0);
          s1++;
        }
       else