summaryrefslogtreecommitdiffstats
path: root/src/parser_json.c
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2018-05-28 18:51:05 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2018-06-01 09:16:48 +0200
commit77e611b63ba958e79eec56d1cd1f18b64f938314 (patch)
tree5f69e5baf1f8c207cdb168d123c38d5399c41dd6 /src/parser_json.c
parent15e3b072de8ad7423db9b54188aab497b9f264d5 (diff)
JSON: Fix parsing of meter statement key
The key must be a set elem expression, but if a "regular" expression was provided (which should be commonly accepted in case no set elem specific properties are required), the resulting object tree crashed libnftables. Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/parser_json.c')
-rw-r--r--src/parser_json.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/parser_json.c b/src/parser_json.c
index 432991fa..864463f4 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -1186,7 +1186,7 @@ static struct expr *json_parse_expr(struct json_ctx *ctx, json_t *root)
{ "jump", json_parse_verdict_expr, CTX_F_RHS | CTX_F_SET_RHS },
{ "goto", json_parse_verdict_expr, CTX_F_RHS | CTX_F_SET_RHS },
{ "return", json_parse_verdict_expr, CTX_F_RHS | CTX_F_SET_RHS },
- { "elem", json_parse_set_elem_expr, CTX_F_RHS | CTX_F_STMT | CTX_F_PRIMARY },
+ { "elem", json_parse_set_elem_expr, CTX_F_RHS | CTX_F_STMT | CTX_F_PRIMARY | CTX_F_SES },
};
const char *type;
unsigned int i;
@@ -1992,7 +1992,7 @@ static struct stmt *json_parse_meter_stmt(struct json_ctx *ctx,
stmt->meter.name = xstrdup(name);
stmt->meter.size = size;
- stmt->meter.key = json_parse_expr(ctx, jkey);
+ stmt->meter.key = json_parse_set_elem_expr_stmt(ctx, jkey);
if (!stmt->meter.key) {
json_error(ctx, "Invalid meter key.");
stmt_free(stmt);