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
|
||||
|
||||
/*
|
||||
* 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 *
|
||||
script_read_arg (FILE *f)
|
||||
|
@ -244,7 +259,7 @@ script_read_arg (FILE *f)
|
|||
if (len >= size)
|
||||
{
|
||||
size = (size + 1) * 2;
|
||||
buf = realloc (buf, size);
|
||||
buf = realloc0 (buf, size);
|
||||
if (! buf)
|
||||
return 0;
|
||||
}
|
||||
|
@ -327,7 +342,7 @@ scm_get_meta_args (int argc, char **argv)
|
|||
found_args:
|
||||
/* FIXME: we leak the result of calling script_read_arg. */
|
||||
while ((narg = script_read_arg (f)))
|
||||
if (!(nargv = (char **) realloc (nargv,
|
||||
if (!(nargv = (char **) realloc0 (nargv,
|
||||
(1 + ++nargc) * sizeof (char *))))
|
||||
return 0L;
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue