diff options
author | Ana Rey <anarey@gmail.com> | 2014-06-26 18:38:55 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-06-30 12:44:48 +0200 |
commit | 05f3bc8ca8434b1d588f02a2077ab212f61ffaf0 (patch) | |
tree | 7c12984bbe59c49b519f84cf3cc23b601db19c4e /src/chain.c | |
parent | 041c85f7b62529a60d1b61f959bd95b049d2e7f5 (diff) |
chain: Free memory in the same function that is reserved
Free memory in the same function that is reserved.
Signed-off-by: Ana Rey <anarey@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/chain.c')
-rw-r--r-- | src/chain.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/chain.c b/src/chain.c index 5311af6..b7e1c5e 100644 --- a/src/chain.c +++ b/src/chain.c @@ -575,37 +575,37 @@ int nft_jansson_parse_chain(struct nft_chain *c, json_t *tree, valstr = nft_jansson_parse_str(root, "name", err); if (valstr == NULL) - goto err; + return -1; nft_chain_attr_set_str(c, NFT_CHAIN_ATTR_NAME, valstr); if (nft_jansson_parse_val(root, "handle", NFT_TYPE_U64, &uval64, err) < 0) - goto err; + return -1; nft_chain_attr_set_u64(c,NFT_CHAIN_ATTR_HANDLE, uval64); if (nft_jansson_parse_val(root, "bytes", NFT_TYPE_U64, &uval64, err) < 0) - goto err; + return -1; nft_chain_attr_set_u64(c, NFT_CHAIN_ATTR_BYTES, uval64); if (nft_jansson_parse_val(root, "packets", NFT_TYPE_U64, &uval64, err) < 0) - goto err; + return -1; nft_chain_attr_set_u64(c, NFT_CHAIN_ATTR_PACKETS, uval64); if (nft_jansson_parse_family(root, &val32, err) != 0) - goto err; + return -1; nft_chain_attr_set_u32(c, NFT_CHAIN_ATTR_FAMILY, val32); valstr = nft_jansson_parse_str(root, "table", err); if (valstr == NULL) - goto err; + return -1; nft_chain_attr_set_str(c, NFT_CHAIN_ATTR_TABLE, valstr); @@ -613,46 +613,41 @@ int nft_jansson_parse_chain(struct nft_chain *c, json_t *tree, valstr = nft_jansson_parse_str(root, "type", err); if (valstr == NULL) - goto err; + return -1; nft_chain_attr_set_str(c, NFT_CHAIN_ATTR_TYPE, valstr); if (nft_jansson_parse_val(root, "prio", NFT_TYPE_S32, &val32, err) < 0) - goto err; + return -1; nft_chain_attr_set_s32(c, NFT_CHAIN_ATTR_PRIO, val32); valstr = nft_jansson_parse_str(root, "hooknum", err); if (valstr == NULL) - goto err; + return -1; val32 = nft_str2hooknum(c->family, valstr); if (val32 == -1) - goto err; + return -1; nft_chain_attr_set_u32(c, NFT_CHAIN_ATTR_HOOKNUM, val32); valstr = nft_jansson_parse_str(root, "policy", err); if (valstr == NULL) - goto err; + return -1; if (nft_str2verdict(valstr, &policy) != 0) { errno = EINVAL; err->node_name = "policy"; err->error = NFT_PARSE_EBADTYPE; - goto err; + return -1; } nft_chain_attr_set_u32(c, NFT_CHAIN_ATTR_POLICY, policy); } - nft_jansson_free_root(tree); return 0; - -err: - nft_jansson_free_root(tree); - return -1; } #endif @@ -663,12 +658,17 @@ static int nft_chain_json_parse(struct nft_chain *c, const void *json, #ifdef JSON_PARSING json_t *tree; json_error_t error; + int ret; tree = nft_jansson_create_root(json, &error, err, input); if (tree == NULL) return -1; - return nft_jansson_parse_chain(c, tree, err); + ret = nft_jansson_parse_chain(c, tree, err); + + nft_jansson_free_root(tree); + + return ret; #else errno = EOPNOTSUPP; return -1; |