Crash when we try to release a tree that is not initialized. Signed-off-by: Alvaro Neira Ayuso <alvaroneay@xxxxxxxxx> --- [changes in v2] * Used the goto to make error paths without crash. src/ruleset.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/ruleset.c b/src/ruleset.c index 89ea344..f56500b 100644 --- a/src/ruleset.c +++ b/src/ruleset.c @@ -535,12 +535,12 @@ static int nft_ruleset_json_parse(const void *json, root = nft_jansson_create_root(json, &error, err, input); if (root == NULL) - goto err; + goto err1; array = json_object_get(root, "nftables"); if (array == NULL) { errno = EINVAL; - goto err; + goto err2; } len = json_array_size(array); @@ -548,23 +548,24 @@ static int nft_ruleset_json_parse(const void *json, node = json_array_get(array, i); if (node == NULL) { errno = EINVAL; - goto err; + goto err2; } ctx.json = node; key = json_object_iter_key(json_object_iter(node)); if (key == NULL) - goto err; + goto err2; if (nft_ruleset_json_parse_cmd(key, err, &ctx) < 0) - goto err; + goto err2; } nft_set_list_free(ctx.set_list); nft_jansson_free_root(root); return 0; -err: - nft_set_list_free(ctx.set_list); +err2: nft_jansson_free_root(root); +err1: + nft_set_list_free(ctx.set_list); return -1; #else errno = EOPNOTSUPP; @@ -665,7 +666,7 @@ static int nft_ruleset_xml_parse(const void *xml, struct nft_parse_err *err, tree = nft_mxml_build_tree(xml, "nftables", err, input); if (tree == NULL) - goto err; + goto err1; ctx.xml = tree; @@ -673,16 +674,17 @@ static int nft_ruleset_xml_parse(const void *xml, struct nft_parse_err *err, while (nodecmd != NULL) { cmd = nodecmd->value.opaque; if (nft_ruleset_xml_parse_cmd(cmd, err, &ctx) < 0) - goto err; + goto err2; nodecmd = mxmlWalkNext(tree, tree, MXML_NO_DESCEND); } nft_set_list_free(ctx.set_list); mxmlDelete(tree); return 0; -err: - nft_set_list_free(ctx.set_list); +err2: mxmlDelete(tree); +err1: + nft_set_list_free(ctx.set_list); return -1; #else errno = EOPNOTSUPP; -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html