]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Plug a memory leak when reading configs with their comments.
authorSean Bright <sean@malleable.com>
Mon, 18 Jan 2010 19:54:19 +0000 (19:54 +0000)
committerSean Bright <sean@malleable.com>
Mon, 18 Jan 2010 19:54:19 +0000 (19:54 +0000)
While reading through configuration files with the intent of returning their
full contents (comments specifically) we allocated some memory and then forgot
to free it.  This doesn't fix 16554 but clears up a leak I had in the lab.

(issue #16554)
Reported by: mav3rick
Patches:
      issue16554_20100118.patch uploaded by seanbright (license 71)
Tested by: seanbright

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@241015 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/config.c

index 21a569dfc4e36318f92183d78ec6d48685985f34..7d2af29c6524912b21003275863e7ba4857dbfdf 100644 (file)
@@ -183,6 +183,8 @@ struct ast_config {
        int max_include_level;
 };
 
+static void ast_destroy_comment(struct ast_comment **comment);
+
 struct ast_variable *ast_variable_new(const char *name, const char *value) 
 {
        struct ast_variable *variable;
@@ -218,6 +220,8 @@ void ast_variables_destroy(struct ast_variable *v)
        while(v) {
                vn = v;
                v = v->next;
+               ast_destroy_comment(&vn->precomments);
+               ast_destroy_comment(&vn->sameline);
                free(vn);
        }
 }
@@ -344,19 +348,22 @@ void ast_category_append(struct ast_config *config, struct ast_category *categor
        config->current = category;
 }
 
-static void ast_destroy_comments(struct ast_category *cat)
+static void ast_destroy_comment(struct ast_comment **comment)
 {
        struct ast_comment *n, *p;
-       for (p=cat->precomments; p; p=n) {
-               n = p->next;
-               free(p);
-       }
-       for (p=cat->sameline; p; p=n) {
+
+       for (p = *comment; p; p = n) {
                n = p->next;
                free(p);
        }
-       cat->precomments = NULL;
-       cat->sameline = NULL;
+
+       *comment = NULL;
+}
+
+static void ast_destroy_comments(struct ast_category *cat)
+{
+       ast_destroy_comment(&cat->precomments);
+       ast_destroy_comment(&cat->sameline);
 }
 
 static void ast_destroy_template_list(struct ast_category *cat)