re PR fortran/14129 ([g77] gcc/f/lex.c buffer size limitation.)
authorRoger Sayle <roger@eyesopen.com>
Sun, 15 Feb 2004 14:27:14 +0000 (14:27 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Sun, 15 Feb 2004 14:27:14 +0000 (14:27 +0000)
PR fortran/14129
* lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack
allocated array.

From-SVN: r77849

gcc/f/ChangeLog
gcc/f/lex.c

index 2677242a6a24c20e488450f24cf5f4ca891a5c9a..9893e5287bf4d12818f3a733f4859e5eb5d53e49 100644 (file)
@@ -1,3 +1,9 @@
+2004-02-15  Roger Sayle  <roger@eyesopen.com>
+
+       PR fortran/14129
+       * lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack
+       allocated array.
+
 2004-02-03  Kazu Hirata  <kazu@cs.umass.edu>
 
        * com.c (ffecom_member_phase2_): Use gen_rtx_MEM instead of
index 3be91b682988ba33b68cfefa3d0f6b31f436b2f2..8475d2ff2c378494d9bf9754715fe55d373dfefa 100644 (file)
@@ -694,7 +694,13 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c)
              register unsigned bytes_used = (p - q);
 
              buffer_length *= 2;
-             q = xrealloc (q, buffer_length);
+             if (q == &buff[0])
+               {
+                 q = xmalloc (buffer_length);
+                 memcpy (q, buff, bytes_used);
+               }
+             else
+               q = xrealloc (q, buffer_length);
              p = &q[bytes_used];
              r = &q[buffer_length];
            }
@@ -754,7 +760,13 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c)
                  register unsigned bytes_used = (p - q);
 
                  buffer_length = bytes_used * 2;
-                 q = xrealloc (q, buffer_length);
+                 if (q == &buff[0])
+                   {
+                     q = xmalloc (buffer_length);
+                     memcpy (q, buff, bytes_used);
+                   }
+                 else
+                   q = xrealloc (q, buffer_length);
                  p = &q[bytes_used];
                  r = &q[buffer_length];
                }