diff options
-rw-r--r-- | src/load.c | 6 | ||||
-rw-r--r-- | test/testdata/invalid | 17 | ||||
-rw-r--r-- | test/testdata/invalid-strip | 17 |
3 files changed, 37 insertions, 3 deletions
@@ -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 |