diff options
-rw-r--r-- | src/netlink_delinearize.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index c4ffab50..841be609 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -331,12 +331,14 @@ static void netlink_parse_bitwise(struct netlink_parse_ctx *ctx, mpz_ior(m, m, o); } - if (mpz_scan0(m, 0) != left->len) { + if (left->len > 0 && mpz_scan0(m, 0) == left->len) { + /* mask encompasses the entire value */ + expr_free(mask); + } else { mpz_set(mask->value, m); expr = binop_expr_alloc(loc, OP_AND, expr, mask); expr->len = left->len; - } else - expr_free(mask); + } if (mpz_cmp_ui(x, 0)) { mpz_set(xor->value, x); |