aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/deprecated/yajl/patches/fix_memory_leak.patch
blob: 5d1e5ea780376a8de72f5a35cd7f881535251f60 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--- contrib/deprecated/yajl/yajl_tree.c	(3b4a018b6b389390da3ee13f6b4ce0880cb71807)
+++ contrib/deprecated/yajl/yajl_tree.c	(5fe0776c5f96630ddffb63e4ff0292037e12039e)
@@ -143,7 +143,7 @@ static yajl_val context_pop(context_t *ctx)
     ctx->stack = stack->next;
 
     v = stack->value;
-
+    free (stack->key);
     free (stack);
 
     return (v);
@@ -453,7 +453,14 @@ yajl_val yajl_tree_parse (const char *input,
                                         (const unsigned char *) input,
                                         strlen(input)));
         }
+        while(ctx.stack != NULL) {
+             yajl_val v = context_pop(&ctx);
+             yajl_tree_free(v);
+        }
         yajl_free (handle);
+        //If the requested memory is not released in time, it will cause memory leakage
+        if(ctx.root)
+            yajl_tree_free(ctx.root);
         return NULL;
     }