44 lines
1.3 KiB
Diff
44 lines
1.3 KiB
Diff
From 666018e71ebb5df376b1b013c1ca859eaed66f1a Mon Sep 17 00:00:00 2001
|
|
From: Florian Westphal <fw@strlen.de>
|
|
Date: Thu, 11 Jan 2024 16:57:28 +0100
|
|
Subject: [PATCH] evaluate: error out when expression has no datatype
|
|
|
|
add rule ip6 f i rt2 addr . ip6 daddr { dead:: . dead:: }
|
|
|
|
... will cause a segmentation fault, we assume expr->dtype is always
|
|
set.
|
|
|
|
rt2 support is incomplete, the template is uninitialised.
|
|
|
|
This could be fixed up, but rt2 (a subset of the deperecated type 0),
|
|
like all other routing headers, lacks correct dependency tracking.
|
|
|
|
Currently such routing headers are always assumed to be segment routing
|
|
headers, we would need to add dependency on 'Routing Type' field in the
|
|
routing header, similar to icmp type/code.
|
|
|
|
Signed-off-by: Florian Westphal <fw@strlen.de>
|
|
---
|
|
src/evaluate.c | 5 +++++
|
|
1 file changed, 5 insertions(+)
|
|
|
|
diff --git a/src/evaluate.c b/src/evaluate.c
|
|
index 41524eef..197c82c2 100644
|
|
--- a/src/evaluate.c
|
|
+++ b/src/evaluate.c
|
|
@@ -1593,6 +1593,11 @@ static int expr_evaluate_concat(struct eval_ctx *ctx, struct expr **expr)
|
|
"cannot use %s in concatenation",
|
|
expr_name(i));
|
|
|
|
+ if (!i->dtype)
|
|
+ return expr_error(ctx->msgs, i,
|
|
+ "cannot use %s in concatenation, lacks datatype",
|
|
+ expr_name(i));
|
|
+
|
|
flags &= i->flags;
|
|
|
|
if (!key && i->dtype->type == TYPE_INTEGER) {
|
|
--
|
|
2.33.0
|
|
|