aboutsummaryrefslogtreecommitdiff
path: root/gcc/f
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2004-02-15 14:27:14 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2004-02-15 14:27:14 +0000
commitfb264fec4885521a881dca835f2794636870a10c (patch)
treea1226b180bc26dd66429b7674063afc8a76e8bc8 /gcc/f
parentaf1967542f8f4607594bc6494014a8b01bd94b9f (diff)
downloadgcc-fb264fec4885521a881dca835f2794636870a10c.zip
gcc-fb264fec4885521a881dca835f2794636870a10c.tar.gz
gcc-fb264fec4885521a881dca835f2794636870a10c.tar.bz2
re PR fortran/14129 ([g77] gcc/f/lex.c buffer size limitation.)
PR fortran/14129 * lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack allocated array. From-SVN: r77849
Diffstat (limited to 'gcc/f')
-rw-r--r--gcc/f/ChangeLog6
-rw-r--r--gcc/f/lex.c16
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index 2677242..9893e52 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -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
diff --git a/gcc/f/lex.c b/gcc/f/lex.c
index 3be91b6..8475d2f 100644
--- a/gcc/f/lex.c
+++ b/gcc/f/lex.c
@@ -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];
}