summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parser_json.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/parser_json.c b/src/parser_json.c
index e3dd14cd..3195d529 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -2951,7 +2951,13 @@ static struct expr *json_parse_devs(struct json_ctx *ctx, json_t *root)
size_t index;
if (!json_unpack(root, "s", &dev)) {
- tmp = constant_expr_alloc(int_loc, &string_type,
+ if (strlen(dev) >= IFNAMSIZ) {
+ json_error(ctx, "Device name %s too long", dev);
+ expr_free(expr);
+ return NULL;
+ }
+
+ tmp = constant_expr_alloc(int_loc, &ifname_type,
BYTEORDER_HOST_ENDIAN,
strlen(dev) * BITS_PER_BYTE, dev);
compound_expr_add(expr, tmp);
@@ -2969,7 +2975,14 @@ static struct expr *json_parse_devs(struct json_ctx *ctx, json_t *root)
expr_free(expr);
return NULL;
}
- tmp = constant_expr_alloc(int_loc, &string_type,
+
+ if (strlen(dev) >= IFNAMSIZ) {
+ json_error(ctx, "Device name %s too long at index %zu", dev, index);
+ expr_free(expr);
+ return NULL;
+ }
+
+ tmp = constant_expr_alloc(int_loc, &ifname_type,
BYTEORDER_HOST_ENDIAN,
strlen(dev) * BITS_PER_BYTE, dev);
compound_expr_add(expr, tmp);