Fix some possible memleaks.

This commit is contained in:
Dale Weiler 2013-06-01 20:18:53 +00:00
parent 9f2b9e1b46
commit 062180e9a8
2 changed files with 8 additions and 6 deletions

View file

@ -5060,6 +5060,7 @@ static ast_value *parse_typename(parser_t *parser, ast_value **storebase, ast_va
/* parse on */
if (!parser_next(parser)) {
ast_delete(var);
mem_d(name);
parseerror(parser, "error after variable or field declaration");
return NULL;
}
@ -5069,8 +5070,10 @@ static ast_value *parse_typename(parser_t *parser, ast_value **storebase, ast_va
if (parser->tok == '[') {
wasarray = true;
var = parse_arraysize(parser, var);
if (!var)
if (!var) {
if (name) mem_d(name);
return NULL;
}
}
/* This is the point where we can turn it into a field */
@ -5089,8 +5092,7 @@ static ast_value *parse_typename(parser_t *parser, ast_value **storebase, ast_va
while (parser->tok == '(') {
var = parse_parameter_list(parser, var);
if (!var) {
if (name)
mem_d((void*)name);
if (name) mem_d(name);
return NULL;
}
}
@ -5099,11 +5101,12 @@ static ast_value *parse_typename(parser_t *parser, ast_value **storebase, ast_va
if (name) {
if (!ast_value_set_name(var, name)) {
ast_delete(var);
mem_d(name);
parseerror(parser, "internal error: failed to set name");
return NULL;
}
/* free the name, ast_value_set_name duplicates */
mem_d((void*)name);
mem_d(name);
}
return var;

3
util.c
View file

@ -170,7 +170,6 @@ static void util_dumpmem(struct memblock_t *memory, uint16_t cols) {
void util_meminfo() {
struct memblock_t *info;
if (OPTS_OPTION_BOOL(OPTION_DEBUG)) {
for (info = mem_start; info; info = info->next) {
con_out("lost: %u (bytes) at %s:%u\n",
@ -178,7 +177,7 @@ void util_meminfo() {
info->file,
info->line);
util_dumpmem(info, OPTS_OPTION_U16(OPTION_MEMDUMPCOLS));
util_dumpmem(info + 1, OPTS_OPTION_U16(OPTION_MEMDUMPCOLS));
}
}