units: Do not accept user functions in unit expressions

Reject something like `1_km(s+N)`

Fixes: #1171

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
This commit is contained in:
Christophe de Dinechin 2024-09-11 01:03:22 +02:00
parent 60faccd143
commit 8330601303
3 changed files with 16 additions and 1 deletions

View file

@ -2213,6 +2213,13 @@ PARSE_BODY(funcall)
nty != ID_list && nty != ID_array)
return SKIP;
// Cannot parse functions while parsing a unit
if (unit::mode)
{
rt.invalid_unit_expression_error().source(p.source);
return ERROR;
}
// Skip whitespace
utf8 source = p.source;
size_t max = p.length;

View file

@ -391,6 +391,8 @@ retry:
// Check if we found the second part
if (r2 == OK)
size += p.length;
else if (r2 != SKIP)
r = r2;
}
}
}

View file

@ -4920,7 +4920,13 @@ void tests::units_and_conversions()
step("Invalid unit exponent")
.test(CLEAR, "1_km^s", ENTER).error("Invalid unit expression");
step("Invalid unit expression")
step("Invalid unit expression for 1_km/(s+N)")
.test(CLEAR, "1_km/",
ALPHA, SHIFT, F,
LOWERCASE, S, NOSHIFT, ADD, ALPHA, N,
ENTER).error("Invalid unit expression")
.test(CLEAR);
step("Invalid unit expression for 1_km(s+N)")
.test(CLEAR, "1_km/",
ALPHA, SHIFT, F, UP, BSP, DOWN,
LOWERCASE, S, NOSHIFT, ADD, ALPHA, N,