mirror of https://github.com/vitalif/e2fsprogs
libss: fix memory leak if realloc() fails in ss_parse()
Addresses-Coverity-Id: #709491 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>maint-test
parent
56087556e1
commit
1fc70c168c
|
@ -45,7 +45,7 @@ enum parse_mode { WHITESPACE, TOKEN, QUOTED_STRING };
|
|||
|
||||
char **ss_parse(int sci_idx, register char *line_ptr, int *argc_ptr)
|
||||
{
|
||||
register char **argv, *cp;
|
||||
register char **argv, **new_argv, *cp;
|
||||
register int argc;
|
||||
register enum parse_mode parse_mode;
|
||||
|
||||
|
@ -78,7 +78,13 @@ char **ss_parse(int sci_idx, register char *line_ptr, int *argc_ptr)
|
|||
/* go to quoted-string mode */
|
||||
parse_mode = QUOTED_STRING;
|
||||
cp = line_ptr++;
|
||||
argv = NEW_ARGV (argv, argc);
|
||||
new_argv = NEW_ARGV (argv, argc);
|
||||
if (new_argv == NULL) {
|
||||
free(argv);
|
||||
*argc_ptr = 0;
|
||||
return NULL;
|
||||
}
|
||||
argv = new_argv;
|
||||
argv[argc++] = cp;
|
||||
argv[argc] = NULL;
|
||||
}
|
||||
|
@ -86,11 +92,13 @@ char **ss_parse(int sci_idx, register char *line_ptr, int *argc_ptr)
|
|||
/* random-token mode */
|
||||
parse_mode = TOKEN;
|
||||
cp = line_ptr;
|
||||
argv = NEW_ARGV (argv, argc);
|
||||
new_argv = NEW_ARGV (argv, argc);
|
||||
if (argv == NULL) {
|
||||
*argc_ptr = errno;
|
||||
return argv;
|
||||
free(argv);
|
||||
*argc_ptr = 0;
|
||||
return NULL;
|
||||
}
|
||||
argv = new_argv;
|
||||
argv[argc++] = line_ptr;
|
||||
argv[argc] = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue