diff options
author | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-15 14:27:14 +0000 |
---|---|---|
committer | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-15 14:27:14 +0000 |
commit | b5ee7b1e602878a6fecba6d03ca6dc126664f98e (patch) | |
tree | a1226b180bc26dd66429b7674063afc8a76e8bc8 /gcc | |
parent | 3eeae8c088b1c937a1cb03ae52abd7bdeb83956d (diff) | |
download | ppe42-gcc-b5ee7b1e602878a6fecba6d03ca6dc126664f98e.tar.gz ppe42-gcc-b5ee7b1e602878a6fecba6d03ca6dc126664f98e.zip |
PR fortran/14129
* lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack
allocated array.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77849 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-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 2677242a6a2..9893e5287bf 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 3be91b68298..8475d2ff2c3 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]; } |