summaryrefslogtreecommitdiffstats
path: root/src/chain.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2014-04-05 20:31:37 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2014-04-07 10:48:55 +0200
commite7ff8bab1f72c5b45ead02a0e5302359616e5cdc (patch)
treeebf1c2ee0f3143539f142492c7d4e1c046970f2a /src/chain.c
parenta6d9aeb52e3c40bf064c49d869b71a27506c080a (diff)
src: fix bogus assertion for unset attributes
If you try to obtain an unset attribute, you hit an assertion error that should not happen. Fix this by checking if the attribute is unset, otherwise skip the assertion checking. Now that we have that nft_assert takes the data parameter, we can also validate if someone is using the setter passing NULL, which is illegal. So let's add an assertion for that as well. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/chain.c')
-rw-r--r--src/chain.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/chain.c b/src/chain.c
index ca71069..472203e 100644
--- a/src/chain.c
+++ b/src/chain.c
@@ -156,7 +156,7 @@ void nft_chain_attr_set_data(struct nft_chain *c, uint16_t attr,
if (attr > NFT_CHAIN_ATTR_MAX)
return;
- nft_assert_validate(nft_chain_attr_validate, attr, data_len);
+ nft_assert_validate(data, nft_chain_attr_validate, attr, data_len);
switch(attr) {
case NFT_CHAIN_ATTR_NAME:
@@ -300,7 +300,7 @@ uint32_t nft_chain_attr_get_u32(struct nft_chain *c, uint16_t attr)
uint32_t data_len;
const uint32_t *val = nft_chain_attr_get_data(c, attr, &data_len);
- nft_assert(attr, data_len == sizeof(uint32_t));
+ nft_assert(val, attr, data_len == sizeof(uint32_t));
return val ? *val : 0;
}
@@ -311,7 +311,7 @@ int32_t nft_chain_attr_get_s32(struct nft_chain *c, uint16_t attr)
uint32_t data_len;
const int32_t *val = nft_chain_attr_get_data(c, attr, &data_len);
- nft_assert(attr, data_len == sizeof(int32_t));
+ nft_assert(val, attr, data_len == sizeof(int32_t));
return val ? *val : 0;
}
@@ -322,7 +322,7 @@ uint64_t nft_chain_attr_get_u64(struct nft_chain *c, uint16_t attr)
uint32_t data_len;
const uint64_t *val = nft_chain_attr_get_data(c, attr, &data_len);
- nft_assert(attr, data_len == sizeof(int64_t));
+ nft_assert(val, attr, data_len == sizeof(int64_t));
return val ? *val : 0;
}
@@ -333,7 +333,7 @@ uint8_t nft_chain_attr_get_u8(struct nft_chain *c, uint16_t attr)
uint32_t data_len;
const uint8_t *val = nft_chain_attr_get_data(c, attr, &data_len);
- nft_assert(attr, data_len == sizeof(int8_t));
+ nft_assert(val, attr, data_len == sizeof(int8_t));
return val ? *val : 0;
}