]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: restore interval sets work with string datatypes
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 13 Apr 2022 02:01:30 +0000 (04:01 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 13 Apr 2022 11:44:03 +0000 (13:44 +0200)
Switch byteorder of string datatypes to host byteorder.

Partial revert of ("src: make interval sets work with string datatypes")
otherwise new interval code complains with conflicting intervals.

testcases/sets/sets_with_ifnames passes fine again.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/expression.c
src/intervals.c

index 5d879b5359906a6eeccbc135ad3a22b0809e93e2..deb649e1847bb935735cf0a681c5a2c1fb663c0e 100644 (file)
@@ -1442,11 +1442,7 @@ void range_expr_value_low(mpz_t rop, const struct expr *expr)
 {
        switch (expr->etype) {
        case EXPR_VALUE:
-               mpz_set(rop, expr->value);
-               if (expr->byteorder == BYTEORDER_HOST_ENDIAN &&
-                   expr_basetype(expr)->type == TYPE_STRING)
-                       mpz_switch_byteorder(rop, expr->len / BITS_PER_BYTE);
-               return;
+               return mpz_set(rop, expr->value);
        case EXPR_PREFIX:
                return range_expr_value_low(rop, expr->prefix);
        case EXPR_RANGE:
@@ -1466,7 +1462,7 @@ void range_expr_value_high(mpz_t rop, const struct expr *expr)
 
        switch (expr->etype) {
        case EXPR_VALUE:
-               return range_expr_value_low(rop, expr);
+               return mpz_set(rop, expr->value);
        case EXPR_PREFIX:
                range_expr_value_low(rop, expr->prefix);
                assert(expr->len >= expr->prefix_len);
index f672d0aac573bbd5d8317b9ee46a7f28e3199c65..451bc4dd4dd45152396356cb25f423ed715ea34c 100644 (file)
@@ -25,6 +25,9 @@ static void setelem_expr_to_range(struct expr *expr)
        case EXPR_PREFIX:
                mpz_init(rop);
                mpz_bitmask(rop, expr->key->len - expr->key->prefix_len);
+               if (expr_basetype(expr)->type == TYPE_STRING)
+                       mpz_switch_byteorder(expr->key->prefix->value, expr->len / BITS_PER_BYTE);
+
                mpz_ior(rop, rop, expr->key->prefix->value);
                mpz_export_data(data, rop, expr->key->prefix->byteorder,
                                expr->key->prefix->len / BITS_PER_BYTE);
@@ -40,6 +43,9 @@ static void setelem_expr_to_range(struct expr *expr)
                expr->key = key;
                break;
        case EXPR_VALUE:
+               if (expr_basetype(expr)->type == TYPE_STRING)
+                       mpz_switch_byteorder(expr->key->value, expr->len / BITS_PER_BYTE);
+
                key = range_expr_alloc(&expr->location,
                                       expr_clone(expr->key),
                                       expr_get(expr->key));