summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2024-10-17 09:17:07 +0200
committerGitHub <noreply@github.com>2024-10-17 09:17:07 +0200
commit07afe9636894e259d148b429bb30a85fd51658e1 (patch)
tree5a4878d66d02b9f832e34096574083e409fd2858
parent9cf53dda36bc25b513ec1b1cdfc851a10b37473f (diff)
parent4134e7182624b37bf17d91fc89b500f5cb443187 (diff)
Merge pull request #240 from jow-/stricter-number-conversion
vallist: more thoroughly check for trailing garbage after numeric string
-rw-r--r--tests/custom/99_bugs/49_trailing_garbage_string_as_number23
-rw-r--r--vallist.c10
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 --
diff --git a/vallist.c b/vallist.c
index 886ede0..61a4a59 100644
--- a/vallist.c
+++ b/vallist.c
@@ -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) {