This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Wed, Jun 3, 2009 at 22:00, Janne Blomqvist <blomqvist.janne@gmail.com> wrote: > Hi, > > the attached patch fixes PR 40330. The problem was that for the saved > format strings we were just keeping pointer to the strings that reside > in the st_parameter_dt structure. However, this lives on the stack so > once it goes out of scope the cached entries became invalid. Fixed by > using heap storage. > > Regtested on x86_64-unknown-linux-gnu, Ok for trunk and 4.4? Upon some further though, realloc() is not appropriate here. Simplified patch attached. Regtested on x86_64-unknown-linux-gnu, Ok for trunk and 4.4? -- Janne Blomqvist
Attachment:
ChangeLog.2
Description: Binary data
diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index a1ec43c..2c116d6 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -87,7 +87,12 @@ free_format_hash_table (gfc_unit *u) for (i = 0; i < FORMAT_HASH_SIZE; i++) { if (u->format_hash_table[i].hashed_fmt != NULL) - free_format_data (u->format_hash_table[i].hashed_fmt); + { + free_format_data (u->format_hash_table[i].hashed_fmt); + free_mem (u->format_hash_table[i].key); + } + u->format_hash_table[i].key = NULL; + u->format_hash_table[i].key_len = 0; u->format_hash_table[i].hashed_fmt = NULL; } } @@ -164,7 +169,11 @@ save_parsed_format (st_parameter_dt *dtp) free_format_data (u->format_hash_table[hash].hashed_fmt); u->format_hash_table[hash].hashed_fmt = NULL; - u->format_hash_table[hash].key = dtp->format; + if (u->format_hash_table[hash].key != NULL) + free_mem (u->format_hash_table[hash].key); + u->format_hash_table[hash].key = get_mem (dtp->format_len); + memcpy (u->format_hash_table[hash].key, dtp->format, dtp->format_len); + u->format_hash_table[hash].key_len = dtp->format_len; u->format_hash_table[hash].hashed_fmt = dtp->u.p.fmt; }
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |