From 32db9dc31a3be9f222677dd991b931b3a85062e4 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 5 Jan 2026 09:32:44 +1030 Subject: [PATCH] common: fix ubsan trigger in param test. ``` common/test/run-param.c:381:8: runtime error: applying zero offset to null pointer SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior common/test/run-param.c:381:8 ``` Probably because CI now on 24.04, so more recent clang. But the test really does want to see what happens when the callback is NULL, so workaround. Signed-off-by: Rusty Russell --- common/test/run-param.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/common/test/run-param.c b/common/test/run-param.c index 2f73a70e5ced..3287eb27d9d4 100644 --- a/common/test/run-param.c +++ b/common/test/run-param.c @@ -376,9 +376,18 @@ static void bad_programmer(void) p_req("repeat", param_millionths, &fpval), NULL); assert(paramcheck_assert_failed); + /* UBSan gets upset with doing arith on NULL pointers, inside + * the p_req macro, so we do it raw here */ +#define p_req_raw(name, cbx, arg) \ + name"", \ + PARAM_REQUIRED, \ + NULL, NULL, \ + (param_cbx)(cbx), \ + (arg) + paramcheck_assert_failed = false; param(cmd, j->buffer, j->toks, - p_req("u64", (param_cbx) NULL, NULL), NULL); + p_req_raw("u64", NULL, NULL), NULL); assert(paramcheck_assert_failed); /* Add required param after optional */