diff options
-rw-r--r-- | include/utils.h | 9 | ||||
-rw-r--r-- | src/chain.c | 4 | ||||
-rw-r--r-- | src/gen.c | 4 | ||||
-rw-r--r-- | src/rule.c | 4 | ||||
-rw-r--r-- | src/set.c | 4 | ||||
-rw-r--r-- | src/table.c | 4 | ||||
-rw-r--r-- | src/utils.c | 8 |
7 files changed, 22 insertions, 15 deletions
diff --git a/include/utils.h b/include/utils.h index 46ff18a..21694b6 100644 --- a/include/utils.h +++ b/include/utils.h @@ -43,6 +43,15 @@ void __nftnl_assert_fail(uint16_t attr, const char *filename, int line); nftnl_assert(data, attr, _validate_array[_attr] == _data_len); \ }) +void __nftnl_assert_attr_exists(uint16_t attr, uint16_t attr_max, + const char *filename, int line); + +#define nftnl_assert_attr_exists(_attr, _attr_max) \ +({ \ + if (_attr > _attr_max) \ + __nftnl_assert_attr_exists(_attr, _attr_max, __FILE__, __LINE__); \ +}) + #define SNPRINTF_BUFFER_SIZE(ret, size, len, offset) \ if (ret < 0) \ return ret; \ diff --git a/src/chain.c b/src/chain.c index 990c576..c7a9597 100644 --- a/src/chain.c +++ b/src/chain.c @@ -168,9 +168,7 @@ static uint32_t nftnl_chain_validate[NFTNL_CHAIN_MAX + 1] = { void nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr, const void *data, uint32_t data_len) { - if (attr > NFTNL_CHAIN_MAX) - return; - + nftnl_assert_attr_exists(attr, NFTNL_CHAIN_MAX); nftnl_assert_validate(data, nftnl_chain_validate, attr, data_len); switch(attr) { @@ -67,9 +67,7 @@ static uint32_t nftnl_gen_validate[NFTNL_GEN_MAX + 1] = { void nftnl_gen_set_data(struct nftnl_gen *gen, uint16_t attr, const void *data, uint32_t data_len) { - if (attr > NFTNL_GEN_MAX) - return; - + nftnl_assert_attr_exists(attr, NFTNL_GEN_MAX); nftnl_assert_validate(data, nftnl_gen_validate, attr, data_len); switch (attr) { @@ -132,9 +132,7 @@ static uint32_t nftnl_rule_validate[NFTNL_RULE_MAX + 1] = { void nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr, const void *data, uint32_t data_len) { - if (attr > NFTNL_RULE_MAX) - return; - + nftnl_assert_attr_exists(attr, NFTNL_RULE_MAX); nftnl_assert_validate(data, nftnl_rule_validate, attr, data_len); switch(attr) { @@ -116,9 +116,7 @@ static uint32_t nftnl_set_validate[NFTNL_SET_MAX + 1] = { void nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data, uint32_t data_len) { - if (attr > NFTNL_SET_MAX) - return; - + nftnl_assert_attr_exists(attr, NFTNL_SET_MAX); nftnl_assert_validate(data, nftnl_set_validate, attr, data_len); switch(attr) { diff --git a/src/table.c b/src/table.c index 42fe49f..7eefc70 100644 --- a/src/table.c +++ b/src/table.c @@ -87,9 +87,7 @@ static uint32_t nftnl_table_validate[NFTNL_TABLE_MAX + 1] = { void nftnl_table_set_data(struct nftnl_table *t, uint16_t attr, const void *data, uint32_t data_len) { - if (attr > NFTNL_TABLE_MAX) - return; - + nftnl_assert_attr_exists(attr, NFTNL_TABLE_MAX); nftnl_assert_validate(data, nftnl_table_validate, attr, data_len); switch (attr) { diff --git a/src/utils.c b/src/utils.c index 22710b9..e2715a2 100644 --- a/src/utils.c +++ b/src/utils.c @@ -269,6 +269,14 @@ out: return ret; } +void __nftnl_assert_attr_exists(uint16_t attr, uint16_t attr_max, + const char *filename, int line) +{ + fprintf(stderr, "libnftnl: attribute %d > %d (maximum) assertion failed in %s:%d\n", + attr, attr_max, filename, line); + exit(EXIT_FAILURE); +} + void __nftnl_assert_fail(uint16_t attr, const char *filename, int line) { fprintf(stderr, "libnftnl: attribute %d assertion failed in %s:%d\n", |