]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Verify that the pushback buffer's size is sufficient.
authorBruno Haible <bruno@clisp.org>
Tue, 30 Dec 2003 11:33:18 +0000 (11:33 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:11:33 +0000 (12:11 +0200)
gettext-tools/src/ChangeLog
gettext-tools/src/x-c.c
gettext-tools/src/x-java.c
gettext-tools/src/x-php.c
gettext-tools/src/x-python.c
gettext-tools/src/x-sh.c
gettext-tools/src/x-smalltalk.c
gettext-tools/src/x-tcl.c
gettext-tools/src/x-ycp.c

index d259c5718254b653d36adad2149f884b1c2f247f..894166a8748daa4d554ea04b0ac702247e8e349d 100644 (file)
@@ -1,3 +1,35 @@
+2003-12-14  Bruno Haible  <bruno@clisp.org>
+
+       * x-c.c (SIZEOF): New macro.
+       (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+       (phase2_ungetc): Likewise.
+       (phase3_ungetc): Likewise.
+       (phase5_unget): Likewise.
+       (phase6_unget): Likewise.
+       * x-java.c (SIZEOF): New macro.
+       (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+       (phase2_ungetc): Likewise.
+       (phase3_ungetc): Likewise.
+       (phase5_unget): Likewise.
+       (phase6_unget): Likewise.
+       * x-php.c (SIZEOF): New macro.
+       (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+       (phase2_ungetc): Likewise.
+       (phase3_ungetc): Likewise.
+       * x-python.c (SIZEOF): New macro.
+       (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+       (phase5_unget): Likewise.
+       * x-sh.c (SIZEOF): New macro.
+       (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+       (phase2_ungetc): Likewise.
+       * x-smalltalk.c (SIZEOF): New macro.
+       (phase2_unget): Verify that the pushback buffer's size is sufficient.
+       * x-tcl.c (SIZEOF): New macro.
+       (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+       (phase2_ungetc): Likewise.
+       * x-ycp.c (SIZEOF): New macro.
+       (phase2_unget): Verify that the pushback buffer's size is sufficient.
+
 2003-12-14  Bruno Haible  <bruno@clisp.org>
 
        * x-c.c (phase1_pushback): Reduce size to 2.
index 22b9e40ee8eefc5b8116f61bfde4a0b04ea6d893..52a79ceeb97cbc98025751ef8da27a52a3a041c1 100644 (file)
@@ -39,6 +39,8 @@
 
 #define _(s) gettext(s)
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
 
 /* The ANSI C standard defines several phases of translation:
 
@@ -436,6 +438,8 @@ phase1_ungetc (int c)
       /* FALLTHROUGH */
 
     default:
+      if (phase1_pushback_length == SIZEOF (phase1_pushback))
+       abort ();
       phase1_pushback[phase1_pushback_length++] = c;
       break;
     }
@@ -502,7 +506,11 @@ static void
 phase2_ungetc (int c)
 {
   if (c != EOF)
-    phase2_pushback[phase2_pushback_length++] = c;
+    {
+      if (phase2_pushback_length == SIZEOF (phase2_pushback))
+       abort ();
+      phase2_pushback[phase2_pushback_length++] = c;
+    }
 }
 
 
@@ -539,7 +547,11 @@ static void
 phase3_ungetc (int c)
 {
   if (c != EOF)
-    phase3_pushback[phase3_pushback_length++] = c;
+    {
+      if (phase3_pushback_length == SIZEOF (phase3_pushback))
+       abort ();
+      phase3_pushback[phase3_pushback_length++] = c;
+    }
 }
 
 
@@ -1167,7 +1179,11 @@ static void
 phase5_unget (token_ty *tp)
 {
   if (tp->type != token_type_eof)
-    phase5_pushback[phase5_pushback_length++] = *tp;
+    {
+      if (phase5_pushback_length == SIZEOF (phase5_pushback))
+       abort ();
+      phase5_pushback[phase5_pushback_length++] = *tp;
+    }
 }
 
 
@@ -1306,7 +1322,11 @@ static void
 phase6_unget (token_ty *tp)
 {
   if (tp->type != token_type_eof)
-    phase6_pushback[phase6_pushback_length++] = *tp;
+    {
+      if (phase6_pushback_length == SIZEOF (phase6_pushback))
+       abort ();
+      phase6_pushback[phase6_pushback_length++] = *tp;
+    }
 }
 
 
index b18f19677ca07cdcd271a95cd2992383f14356ca..8bb0545e9eb0434bed5fdf36775929b0980928d4 100644 (file)
@@ -40,6 +40,8 @@
 
 #define _(s) gettext(s)
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
 
 /* The Java syntax is defined in the
      Java Language Specification, Second Edition,
@@ -190,10 +192,18 @@ phase1_ungetc (int c)
              && phase1_pushback[phase1_pushback_length - 1] >= MULTIPLE_U (0))
            phase1_pushback[phase1_pushback_length - 1]++;
          else
-           phase1_pushback[phase1_pushback_length++] = MULTIPLE_U (1);
+           {
+             if (phase1_pushback_length == SIZEOF (phase1_pushback))
+               abort ();
+             phase1_pushback[phase1_pushback_length++] = MULTIPLE_U (1);
+           }
        }
       else
-       phase1_pushback[phase1_pushback_length++] = c;
+       {
+         if (phase1_pushback_length == SIZEOF (phase1_pushback))
+           abort ();
+         phase1_pushback[phase1_pushback_length++] = c;
+       }
     }
 }
 
@@ -290,7 +300,11 @@ static void
 phase2_ungetc (int c)
 {
   if (c != P2_EOF)
-    phase2_pushback[phase2_pushback_length++] = c;
+    {
+      if (phase2_pushback_length == SIZEOF (phase2_pushback))
+       abort ();
+      phase2_pushback[phase2_pushback_length++] = c;
+    }
 }
 
 
@@ -356,6 +370,8 @@ phase3_ungetc (int c)
     {
       if (c == '\n')
        --line_number;
+      if (phase3_pushback_length == SIZEOF (phase3_pushback))
+       abort ();
       phase3_pushback[phase3_pushback_length++] = c;
     }
 }
@@ -1126,7 +1142,11 @@ static void
 phase5_unget (token_ty *tp)
 {
   if (tp->type != token_type_eof)
-    phase5_pushback[phase5_pushback_length++] = *tp;
+    {
+      if (phase5_pushback_length == SIZEOF (phase5_pushback))
+       abort ();
+      phase5_pushback[phase5_pushback_length++] = *tp;
+    }
 }
 
 
@@ -1203,7 +1223,11 @@ static void
 phase6_unget (token_ty *tp)
 {
   if (tp->type != token_type_eof)
-    phase6_pushback[phase6_pushback_length++] = *tp;
+    {
+      if (phase6_pushback_length == SIZEOF (phase6_pushback))
+       abort ();
+      phase6_pushback[phase6_pushback_length++] = *tp;
+    }
 }
 
 
index db71b3982223dd1e32878fd266dc5c0b016c1dbf..80175e7ad15f0276ddda91a517e005ab67f5a9cf 100644 (file)
@@ -36,6 +36,8 @@
 
 #define _(s) gettext(s)
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
 
 /* The PHP syntax is defined in phpdoc/manual/langref.html.
    See also php-4.1.0/Zend/zend_language_scanner.l.  */
@@ -178,6 +180,8 @@ phase1_ungetc (int c)
       if (c == '\n')
        --line_number;
 
+      if (phase1_pushback_length == SIZEOF (phase1_pushback))
+       abort ();
       phase1_pushback[phase1_pushback_length++] = c;
     }
 }
@@ -515,7 +519,11 @@ static void
 phase2_ungetc (int c)
 {
   if (c != EOF)
-    phase2_pushback[phase2_pushback_length++] = c;
+    {
+      if (phase2_pushback_length == SIZEOF (phase2_pushback))
+       abort ();
+      phase2_pushback[phase2_pushback_length++] = c;
+    }
 }
 
 #endif
@@ -711,7 +719,11 @@ static void
 phase3_ungetc (int c)
 {
   if (c != EOF)
-    phase3_pushback[phase3_pushback_length++] = c;
+    {
+      if (phase3_pushback_length == SIZEOF (phase3_pushback))
+       abort ();
+      phase3_pushback[phase3_pushback_length++] = c;
+    }
 }
 #endif
 
index fb53dc35052fa4ca620ef4d5b521fa3ea2bdff64..3e2ced7a4022847e830a124e0747b80a9e4a5f55 100644 (file)
 #include "gettext.h"
 
 #define _(s) gettext(s)
+
 #define max(a,b) ((a) > (b) ? (a) : (b))
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
 
 /* The Python syntax is defined in the Python Reference Manual
    /usr/share/doc/packages/python/html/ref/index.html.
@@ -185,6 +188,8 @@ phase1_ungetc (int c)
       if (c == '\n')
        --line_number;
 
+      if (phase1_pushback_length == SIZEOF (phase1_pushback))
+       abort ();
       phase1_pushback[phase1_pushback_length++] = c;
     }
 }
@@ -951,7 +956,11 @@ static void
 phase5_unget (token_ty *tp)
 {
   if (tp->type != token_type_eof)
-    phase5_pushback[phase5_pushback_length++] = *tp;
+    {
+      if (phase5_pushback_length == SIZEOF (phase5_pushback))
+       abort ();
+      phase5_pushback[phase5_pushback_length++] = *tp;
+    }
 }
 
 
index 5feda599c6cf5cd2f9c6028015d78e4bd7ec73b2..66faadd78288d93d24c2553c8956b6a2b3ce4c99 100644 (file)
@@ -38,6 +38,9 @@
 
 #define _(s) gettext(s)
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
+
 /* The sh syntax is defined in POSIX:2001, see
      http://www.opengroup.org/onlinepubs/007904975/utilities/xcu_chap02.html
    Summary of sh syntax:
@@ -218,6 +221,8 @@ phase1_ungetc (int c)
       /* FALLTHROUGH */
 
     default:
+      if (phase1_pushback_length == SIZEOF (phase1_pushback))
+       abort ();
       phase1_pushback[phase1_pushback_length++] = c;
       break;
     }
@@ -672,6 +677,8 @@ phase2_ungetc (int c)
       /* FALLTHROUGH */
 
     default:
+      if (phase2_pushback_length == SIZEOF (phase2_pushback))
+       abort ();
       phase2_pushback[phase2_pushback_length++] = c;
       break;
     }
index 54768032f8e62de898d5c06d8dffed29c17387e3..f081f86b4b5822a8e80ea9bf5d037f1bf679ec2d 100644 (file)
@@ -35,6 +35,9 @@
 
 #define _(s) gettext(s)
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
+
 /* The relevant parts of the Smalltalk syntax are:
 
      stringliteral ::= string | stringconst | symconst
@@ -439,7 +442,11 @@ static void
 phase2_unget (token_ty *tp)
 {
   if (tp->type != token_type_eof)
-    phase2_pushback[phase2_pushback_length++] = *tp;
+    {
+      if (phase2_pushback_length == SIZEOF (phase2_pushback))
+       abort ();
+      phase2_pushback[phase2_pushback_length++] = *tp;
+    }
 }
 
 
index 1b4d64a879de93b72061ac3ff1035565b6d89599..75871b406270a63b400b814203b3caf62b66ff42 100644 (file)
@@ -43,6 +43,8 @@
 
 #define _(s) gettext(s)
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
 
 /* The Tcl syntax is defined in the Tcl.n manual page.
    Summary of Tcl syntax:
@@ -223,6 +225,8 @@ phase1_ungetc (int c)
       /* FALLTHROUGH */
 
     default:
+      if (phase1_pushback_length == SIZEOF (phase1_pushback))
+       abort ();
       phase1_pushback[phase1_pushback_length++] = c;
       break;
     }
@@ -307,6 +311,8 @@ phase2_ungetc (int c)
          ++brace_depth;
          break;
        }
+      if (phase2_pushback_length == SIZEOF (phase2_pushback))
+       abort ();
       phase2_pushback[phase2_pushback_length++] = c;
     }
 }
index 8a8beae378b175471224bb754425bad302746346..6ab49a6d9929950d6e66d5c66591af92e501dedf 100644 (file)
@@ -38,6 +38,8 @@
 
 #define _(s) gettext(s)
 
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
 
 /* The YCP syntax is defined in libycp/doc/syntax.html.
    See also libycp/src/scanner.ll.  */
@@ -296,7 +298,11 @@ static void
 phase2_ungetc (int c)
 {
   if (c != EOF)
-    phase2_pushback[phase2_pushback_length++] = c;
+    {
+      if (phase2_pushback_length == SIZEOF (phase2_pushback))
+       abort ();
+      phase2_pushback[phase2_pushback_length++] = c;
+    }
 }