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)
|
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 int argc;
|
||||||
register enum parse_mode parse_mode;
|
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 */
|
/* go to quoted-string mode */
|
||||||
parse_mode = QUOTED_STRING;
|
parse_mode = QUOTED_STRING;
|
||||||
cp = line_ptr++;
|
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++] = cp;
|
||||||
argv[argc] = NULL;
|
argv[argc] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -86,11 +92,13 @@ char **ss_parse(int sci_idx, register char *line_ptr, int *argc_ptr)
|
||||||
/* random-token mode */
|
/* random-token mode */
|
||||||
parse_mode = TOKEN;
|
parse_mode = TOKEN;
|
||||||
cp = line_ptr;
|
cp = line_ptr;
|
||||||
argv = NEW_ARGV (argv, argc);
|
new_argv = NEW_ARGV (argv, argc);
|
||||||
if (argv == NULL) {
|
if (argv == NULL) {
|
||||||
*argc_ptr = errno;
|
free(argv);
|
||||||
return argv;
|
*argc_ptr = 0;
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
argv = new_argv;
|
||||||
argv[argc++] = line_ptr;
|
argv[argc++] = line_ptr;
|
||||||
argv[argc] = NULL;
|
argv[argc] = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue