Mercurial > hg > octave-lyh > gnulib-hg
changeset 5044:b1006348a448
Avoid memory leak upon realloc failure.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 20 Apr 2004 11:07:32 +0000 |
parents | 830c6d4fd6f6 |
children | 325f3a7a5d79 |
files | lib/ChangeLog lib/localcharset.c |
diffstat | 2 files changed, 16 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,9 @@ +2004-04-20 Jim Meyering <jim@meyering.net> + Bruno Haible <bruno@clisp.org> + + * localcharset.c (get_charset_aliases) [!VMS && !WIN32]: Don't leak + memory when realloc fails. + 2004-04-18 Jim Meyering <jim@meyering.net> * readutmp.c (read_utmp) [UTMP_NAME_FUNCTION]: Upon realloc failure,
--- a/lib/localcharset.c +++ b/lib/localcharset.c @@ -1,6 +1,6 @@ /* Determine a canonical name for the current locale's character encoding. - Copyright (C) 2000-2003 Free Software Foundation, Inc. + Copyright (C) 2000-2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -140,15 +140,17 @@ else { /* Parse the file's contents. */ - int c; - char buf1[50+1]; - char buf2[50+1]; char *res_ptr = NULL; size_t res_size = 0; - size_t l1, l2; for (;;) { + int c; + char buf1[50+1]; + char buf2[50+1]; + size_t l1, l2; + char *old_res_ptr; + c = getc (fp); if (c == EOF) break; @@ -169,6 +171,7 @@ break; l1 = strlen (buf1); l2 = strlen (buf2); + old_res_ptr = res_ptr; if (res_size == 0) { res_size = l1 + 1 + l2 + 1; @@ -183,6 +186,8 @@ { /* Out of memory. */ res_size = 0; + if (old_res_ptr != NULL) + free (old_res_ptr); break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);