aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/load.c6
-rw-r--r--test/testdata/invalid17
-rw-r--r--test/testdata/invalid-strip17
3 files changed, 37 insertions, 3 deletions
diff --git a/src/load.c b/src/load.c
index 53241ff..1ae62b3 100644
--- a/src/load.c
+++ b/src/load.c
@@ -418,11 +418,15 @@ static int lex_scan_number(lex_t *lex, char c, json_error_t *error)
goto out;
}
}
- else /* c != '0' */ {
+ else if(isdigit(c)) {
c = lex_get_save(lex, error);
while(isdigit(c))
c = lex_get_save(lex, error);
}
+ else {
+ lex_unget_unsave(lex, c);
+ goto out;
+ }
if(c != '.' && c != 'E' && c != 'e') {
long value;
diff --git a/test/testdata/invalid b/test/testdata/invalid
index 1a70422..7fede67 100644
--- a/test/testdata/invalid
+++ b/test/testdata/invalid
@@ -167,7 +167,22 @@ too big negative integer near '-123123123123123'
====
1
invalid token near 'troo'
-==== invalid-escap ====
+==== minus-sign-without-number ====
+[-foo]
+====
+1
+invalid token near '-'
+==== invalid-negative-integerr ====
+[-123foo]
+====
+1
+']' expected near 'foo'
+==== invalid-negative-real ====
+[-123.123foo]
+====
+1
+']' expected near 'foo'
+==== invalid-escape ====
["\a <-- invalid escape"]
====
1
diff --git a/test/testdata/invalid-strip b/test/testdata/invalid-strip
index 8b4a574..1efdc25 100644
--- a/test/testdata/invalid-strip
+++ b/test/testdata/invalid-strip
@@ -167,7 +167,22 @@ too big negative integer near '-123123123123123'
====
1
invalid token near 'troo'
-==== invalid-escap ====
+==== minus-sign-without-number ====
+[-foo]
+====
+1
+invalid token near '-'
+==== invalid-negative-integerr ====
+[-123foo]
+====
+1
+']' expected near 'foo'
+==== invalid-negative-real ====
+[-123.123foo]
+====
+1
+']' expected near 'foo'
+==== invalid-escape ====
["\a <-- invalid escape"]
====
1