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:
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;
}
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;
}
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;
}
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;
}
void __nft_assert_fail(uint16_t attr, const char *filename, int line);
-#define nft_assert(attr, expr) \
- ((expr) \
+#define nft_assert(val, attr, expr) \
+ ((!val || expr) \
? (void)0 \
: __nft_assert_fail(attr, __FILE__, __LINE__))
-#define nft_assert_validate(_validate_array, _attr, _data_len) \
-({ \
- if (_validate_array[_attr]) \
- nft_assert(attr, _validate_array[_attr] == _data_len); \
+#define nft_assert_validate(data, _validate_array, _attr, _data_len) \
+({ \
+ if (!data) \
+ __nft_assert_fail(attr, __FILE__, __LINE__); \
+ if (_validate_array[_attr]) \
+ nft_assert(data, attr, _validate_array[_attr] == _data_len); \
})
#endif
if (attr > NFT_RULE_ATTR_MAX)
return;
- nft_assert_validate(nft_rule_attr_validate, attr, data_len);
+ nft_assert_validate(data, nft_rule_attr_validate, attr, data_len);
switch(attr) {
case NFT_RULE_ATTR_TABLE:
uint32_t data_len;
const uint32_t *val = nft_rule_attr_get_data(r, attr, &data_len);
- nft_assert(attr, data_len == sizeof(uint32_t));
+ nft_assert(val, attr, data_len == sizeof(uint32_t));
return val ? *val : 0;
}
uint32_t data_len;
const uint64_t *val = nft_rule_attr_get_data(r, attr, &data_len);
- nft_assert(attr, data_len == sizeof(uint64_t));
+ nft_assert(val, attr, data_len == sizeof(uint64_t));
return val ? *val : 0;
}
uint32_t data_len;
const uint8_t *val = nft_rule_attr_get_data(r, attr, &data_len);
- nft_assert(attr, data_len == sizeof(uint8_t));
+ nft_assert(val, attr, data_len == sizeof(uint8_t));
return val ? *val : 0;
}
if (attr > NFT_SET_ATTR_MAX)
return;
- nft_assert_validate(nft_set_attr_validate, attr, data_len);
+ nft_assert_validate(data, nft_set_attr_validate, attr, data_len);
switch(attr) {
case NFT_SET_ATTR_TABLE:
uint32_t data_len;
const uint32_t *val = nft_set_attr_get_data(s, attr, &data_len);
- nft_assert(attr, data_len == sizeof(uint32_t));
+ nft_assert(val, attr, data_len == sizeof(uint32_t));
return val ? *val : 0;
}
if (attr > NFT_TABLE_ATTR_MAX)
return;
- nft_assert_validate(nft_table_attr_validate, attr, data_len);
+ nft_assert_validate(data, nft_table_attr_validate, attr, data_len);
switch (attr) {
case NFT_TABLE_ATTR_NAME: