From fb264fec4885521a881dca835f2794636870a10c Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Sun, 15 Feb 2004 14:27:14 +0000 Subject: [PATCH] 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 --- gcc/f/ChangeLog | 6 ++++++ 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 + + PR fortran/14129 + * lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack + allocated array. + 2004-02-03 Kazu Hirata * 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]; } -- 2.30.2