From: Pablo Neira Ayuso Date: Mon, 29 Aug 2016 10:49:35 +0000 (+0200) Subject: evaluate: add expr_evaluate_integer() X-Git-Tag: v0.7~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb7cb885d65ec02aa33872b4bd382ef8a692113a;p=thirdparty%2Fnftables.git evaluate: add expr_evaluate_integer() Add a helper function to wrap the integer evaluation code. Signed-off-by: Pablo Neira Ayuso --- diff --git a/src/evaluate.c b/src/evaluate.c index 8f7824b5..39573e96 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -263,27 +263,35 @@ static int expr_evaluate_string(struct eval_ctx *ctx, struct expr **exprp) return 0; } -static int expr_evaluate_value(struct eval_ctx *ctx, struct expr **expr) +static int expr_evaluate_integer(struct eval_ctx *ctx, struct expr **exprp) { + struct expr *expr = *exprp; mpz_t mask; + mpz_init_bitmask(mask, ctx->ectx.len); + if (mpz_cmp(expr->value, mask) > 0) { + char *valstr = mpz_get_str(NULL, 10, expr->value); + char *rangestr = mpz_get_str(NULL, 10, mask); + expr_error(ctx->msgs, expr, + "Value %s exceeds valid range 0-%s", + valstr, rangestr); + free(valstr); + free(rangestr); + mpz_clear(mask); + return -1; + } + expr->byteorder = ctx->ectx.byteorder; + expr->len = ctx->ectx.len; + mpz_clear(mask); + return 0; +} + +static int expr_evaluate_value(struct eval_ctx *ctx, struct expr **expr) +{ switch (expr_basetype(*expr)->type) { case TYPE_INTEGER: - mpz_init_bitmask(mask, ctx->ectx.len); - if (mpz_cmp((*expr)->value, mask) > 0) { - char *valstr = mpz_get_str(NULL, 10, (*expr)->value); - char *rangestr = mpz_get_str(NULL, 10, mask); - expr_error(ctx->msgs, *expr, - "Value %s exceeds valid range 0-%s", - valstr, rangestr); - free(valstr); - free(rangestr); - mpz_clear(mask); + if (expr_evaluate_integer(ctx, expr) < 0) return -1; - } - (*expr)->byteorder = ctx->ectx.byteorder; - (*expr)->len = ctx->ectx.len; - mpz_clear(mask); break; case TYPE_STRING: if (expr_evaluate_string(ctx, expr) < 0)