]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
json: Expect refcount increment by json_array_extend()
authorPhil Sutter <phil@nwl.cc>
Wed, 29 Jul 2020 12:21:12 +0000 (14:21 +0200)
committerPhil Sutter <phil@nwl.cc>
Wed, 29 Jul 2020 14:55:03 +0000 (16:55 +0200)
This function is apparently not "joining" two arrays but rather copying
all items from the second array to the first, leaving the original
reference in place. Therefore it naturally increments refcounts, which
means if used to join two arrays caller must explicitly decrement the
second array's refcount.

Fixes: e70354f53e9f6 ("libnftables: Implement JSON output support")
Signed-off-by: Phil Sutter <phil@nwl.cc>
src/json.c

index 24583060e68e7906b08bd17e1a621167d4e325fb..888cb371e971d122aa8b4b30935c3d386755cb6e 100644 (file)
@@ -1568,7 +1568,7 @@ static json_t *table_print_json_full(struct netlink_ctx *ctx,
 static json_t *do_list_ruleset_json(struct netlink_ctx *ctx, struct cmd *cmd)
 {
        unsigned int family = cmd->handle.family;
-       json_t *root = json_array();
+       json_t *root = json_array(), *tmp;
        struct table *table;
 
        list_for_each_entry(table, &ctx->nft->cache.list, list) {
@@ -1576,7 +1576,9 @@ static json_t *do_list_ruleset_json(struct netlink_ctx *ctx, struct cmd *cmd)
                    table->handle.family != family)
                        continue;
 
-               json_array_extend(root, table_print_json_full(ctx, table));
+               tmp = table_print_json_full(ctx, table);
+               json_array_extend(root, tmp);
+               json_decref(tmp);
        }
 
        return root;