Fix some possible memleaks.
authorDale Weiler <killfieldengine@gmail.com>
Sat, 1 Jun 2013 20:18:53 +0000 (20:18 +0000)
committerDale Weiler <killfieldengine@gmail.com>
Sat, 1 Jun 2013 20:18:53 +0000 (20:18 +0000)
parser.c
util.c

index 97a3ccba57f5c74428312d17b6222380483488ba..14d58b645ad80e90b1b8844b73b5e7aea459d12c 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -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;
diff --git a/util.c b/util.c
index d695ae62f451e2de25f79c029877294cf17c6599..54f8d56edc46533c0e25ef9d2a28d913fa0702e4 100644 (file)
--- a/util.c
+++ b/util.c
@@ -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));
         }
     }