mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Fix memory leak on `realloc' failure
* libguile/script.c (realloc0): New helper. (script_read_arg, scm_get_meta_args): Use realloc0, not realloc. Signed-off-by: Dmitry Bogatov <KAction@gnu.org>
This commit is contained in:
parent
d2fcbb193b
commit
7eaa92ffa9
1 changed files with 18 additions and 3 deletions
|
@ -219,6 +219,21 @@ script_get_backslash (FILE *f)
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Like `realloc', but free memory on failure;
|
||||||
|
* unlike `scm_realloc', return NULL, not aborts.
|
||||||
|
*/
|
||||||
|
static void*
|
||||||
|
realloc0 (void *ptr, size_t size)
|
||||||
|
{
|
||||||
|
void *new_ptr = realloc (ptr, size);
|
||||||
|
if (!new_ptr)
|
||||||
|
{
|
||||||
|
free (ptr);
|
||||||
|
}
|
||||||
|
return new_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
script_read_arg (FILE *f)
|
script_read_arg (FILE *f)
|
||||||
|
@ -244,7 +259,7 @@ script_read_arg (FILE *f)
|
||||||
if (len >= size)
|
if (len >= size)
|
||||||
{
|
{
|
||||||
size = (size + 1) * 2;
|
size = (size + 1) * 2;
|
||||||
buf = realloc (buf, size);
|
buf = realloc0 (buf, size);
|
||||||
if (! buf)
|
if (! buf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -327,9 +342,9 @@ scm_get_meta_args (int argc, char **argv)
|
||||||
found_args:
|
found_args:
|
||||||
/* FIXME: we leak the result of calling script_read_arg. */
|
/* FIXME: we leak the result of calling script_read_arg. */
|
||||||
while ((narg = script_read_arg (f)))
|
while ((narg = script_read_arg (f)))
|
||||||
if (!(nargv = (char **) realloc (nargv,
|
if (!(nargv = (char **) realloc0 (nargv,
|
||||||
(1 + ++nargc) * sizeof (char *))))
|
(1 + ++nargc) * sizeof (char *))))
|
||||||
return 0L;
|
return 0L;
|
||||||
else
|
else
|
||||||
nargv[nargi++] = narg;
|
nargv[nargi++] = narg;
|
||||||
fclose (f);
|
fclose (f);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue