parse.c parse_string
When parse_semi fails, free s before returning parse.c parse_numeric_aggregate The memory assigned to bufp is complicated, it can either be from the input parameter buf or allocated locally. Introduce a new variable lbufp to track when it is assigned locally and to free it when appropriate. Submitted by: Thomas Rix <trix@juniper.net> Reviewed by: jhb Approved by: sjg (mentor) Obtained from: Juniper Networks, Inc. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D9899
This commit is contained in:
parent
9a81ba0f24
commit
bbeb726b93
@ -131,8 +131,10 @@ parse_string(FILE *cfile)
|
||||
error("no memory for string %s.", val);
|
||||
memcpy(s, val, valsize);
|
||||
|
||||
if (!parse_semi(cfile))
|
||||
if (!parse_semi(cfile)) {
|
||||
free(s);
|
||||
return (NULL);
|
||||
}
|
||||
return (s);
|
||||
}
|
||||
|
||||
@ -246,9 +248,10 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *buf, int *max,
|
||||
char *val, *t;
|
||||
size_t valsize;
|
||||
pair c = NULL;
|
||||
unsigned char *lbufp = NULL;
|
||||
|
||||
if (!bufp && *max) {
|
||||
bufp = malloc(*max * size / 8);
|
||||
lbufp = bufp = malloc(*max * size / 8);
|
||||
if (!bufp)
|
||||
error("can't allocate space for numeric aggregate");
|
||||
} else
|
||||
@ -265,6 +268,7 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *buf, int *max,
|
||||
parse_warn("too few numbers.");
|
||||
if (token != SEMI)
|
||||
skip_to_semi(cfile);
|
||||
free(lbufp);
|
||||
return (NULL);
|
||||
}
|
||||
token = next_token(&val, cfile);
|
||||
@ -281,6 +285,7 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *buf, int *max,
|
||||
(base != 16 || token != NUMBER_OR_NAME)) {
|
||||
parse_warn("expecting numeric value.");
|
||||
skip_to_semi(cfile);
|
||||
free(lbufp);
|
||||
return (NULL);
|
||||
}
|
||||
/*
|
||||
@ -302,6 +307,7 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *buf, int *max,
|
||||
|
||||
/* If we had to cons up a list, convert it now. */
|
||||
if (c) {
|
||||
free(lbufp);
|
||||
bufp = malloc(count * size / 8);
|
||||
if (!bufp)
|
||||
error("can't allocate space for numeric aggregate.");
|
||||
|
Loading…
x
Reference in New Issue
Block a user