diff options
-rw-r--r-- | tests/custom/99_bugs/49_trailing_garbage_string_as_number | 23 | ||||
-rw-r--r-- | vallist.c | 10 |
2 files changed, 31 insertions, 2 deletions
diff --git a/tests/custom/99_bugs/49_trailing_garbage_string_as_number b/tests/custom/99_bugs/49_trailing_garbage_string_as_number new file mode 100644 index 0000000..1b48146 --- /dev/null +++ b/tests/custom/99_bugs/49_trailing_garbage_string_as_number @@ -0,0 +1,23 @@ +Ensure that numeric strings followed by non-whitespace are treated as NaN. + +-- Testcase -- +{% +printf("%.J\n", [ + "1" == 1, + " 1" == 1, + "1 " == 1, + "1a" == 1, + "1 a" == 1 +]); +%} +-- End -- + +-- Expect stdout -- +[ + true, + true, + true, + false, + false +] +-- End -- @@ -106,7 +106,10 @@ uc_number_parse_common(const char *buf, bool octal, char **end) if (base >= 10 && (**end == '.' || (**end|32) == 'e')) { d = strtod(p, end); - if (!isspace(**end) && **end != 0) + while (isspace(**end)) + (*end)++; + + if (**end != 0) return NULL; if (neg) @@ -115,7 +118,10 @@ uc_number_parse_common(const char *buf, bool octal, char **end) return ucv_double_new(d); } - if (!isspace(**end) && **end != 0) + while (isspace(**end)) + (*end)++; + + if (**end != 0) return NULL; if (neg) { |