Files
StalderT 07be1409d5 fix(util): don't wrap numbers above 32 bits and cap the NumericRange dimensions
UA_readNumberWithBase multiplied without an overflow check, so "4294967296" was read as 0 and "4294967297" as 1. In an IndexRange that silently returned element 1 with a Good status, and the same wrap applied to a NodeId like "i=4294967297" or a port in an endpoint URL. UA_readNumberWithBase now returns zero digits when the number does not fit into 32 bits, which every caller already treats as invalid.

An IndexRange index above 32 bits still has a valid syntax, so the NumericRange parser saturates it instead of rejecting it. The range checks then return Bad_IndexRangeNoData beyond the lower bound and partial results beyond the upper bound, as Part 4, 7.27 asks.

UA_NumericRange_parse also accepted any number of dimensions and grew its array by two entries per realloc, so one long IndexRange string meant millions of reallocations for a range that copyRange and setRange reject anyway above UA_MAX_ARRAY_DIMS. The parser now stops at that limit with Bad_IndexRangeNoData.
2026-10-11 09:56:48 +02:00
..
…
…