re PR libfortran/40330 (incorrect IO)

PR libfortran/40330

Use heap memory for cached format strings.

From-SVN: r148149
This commit is contained in:
Janne Blomqvist 2009-06-04 00:07:19 +03:00
parent 9e0667cd3a
commit 0c40d2340a
2 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2009-06-04 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/40330
* io/format.c (free_format_hash_table): Also free and nullify hash key.
(save_parsed_format): Copy string rather than pointer copy.
2009-05-29 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/40019

View File

@ -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;
}