diff options
author | Álvaro Neira Ayuso <alvaroneay@gmail.com> | 2013-08-14 12:19:19 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-08-17 12:49:54 +0200 |
commit | 0334a23918ebb008f81694e855141b8d8f5f72a9 (patch) | |
tree | a49a29e51fe88de8eb3253b4539f9082f7da4f89 /src/jansson.c | |
parent | 7c24c00fe03318a4b95a0b9cf02257604c954937 (diff) |
json: fixed some leaks in the json parsing function
This patch fixes some leaks in the json parsing function. After this patch,
we use nft_jansson_free_root. This function uses json_decref and it
decrements the reference count and it releases the node if needed.
Signed-off-by: Alvaro Neira Ayuso <alvaroneay@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/jansson.c')
-rw-r--r-- | src/jansson.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/jansson.c b/src/jansson.c index cc3ab23..ca29863 100644 --- a/src/jansson.c +++ b/src/jansson.c @@ -72,7 +72,7 @@ bool nft_jansson_node_exist(json_t *root, const char *tag) return json_object_get(root, tag) != NULL; } -json_t *nft_jansson_get_root(char *json, const char *tag, json_error_t *err) +json_t *nft_jansson_create_root(char *json, json_error_t *err) { json_t *root; @@ -82,14 +82,27 @@ json_t *nft_jansson_get_root(char *json, const char *tag, json_error_t *err) return NULL; } - root = json_object_get(root, tag); - if (root == NULL) { + return root; +} + +json_t *nft_jansson_get_node(json_t *root, const char *tag) +{ + json_t *node; + + node = json_object_get(root, tag); + if (node == NULL) { errno = EINVAL; return NULL; } - return root; + return node; } + +void nft_jansson_free_root(json_t *root) +{ + json_decref(root); +} + int nft_jansson_parse_family(json_t *root, void *out) { const char *str; |