diff options
author | Roger Sayle <roger@eyesopen.com> | 2004-02-15 14:27:14 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2004-02-15 14:27:14 +0000 |
commit | fb264fec4885521a881dca835f2794636870a10c (patch) | |
tree | a1226b180bc26dd66429b7674063afc8a76e8bc8 /gcc/f | |
parent | af1967542f8f4607594bc6494014a8b01bd94b9f (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/f/lex.c | 16 |
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]; } |