In current code, some ASNUMs with redundant zero are legal,
e.g. "1.01", "01.1", "1.001", "001.1", and more. They should
be forbidden.
Signed-off-by: anlan_cs <vic.lan@pica8.com>
if (!isdigit((unsigned char)*p))
goto end;
+ /* leading zero is forbidden */
+ if (*p == '0' && isdigit((unsigned char)*(p + 1)))
+ goto end;
+
temp_val = 0;
while (isdigit((unsigned char)*p)) {
digit = (*p) - '0';
high = (uint32_t)temp_val;
if (*p == '.') { /* dot format */
p++;
- temp_val = 0;
+
if (*p == '\0' && partial) {
*partial = true;
goto end;
}
+
+ /* leading zero is forbidden */
+ if (*p == '0' && isdigit((unsigned char)*(p + 1)))
+ goto end;
+
+ temp_val = 0;
while (isdigit((unsigned char)*p)) {
digit = (*p) - '0';
temp_val *= 10;