From d3959a8ce79bb30a8b39a275a4682885e97d17cc Mon Sep 17 00:00:00 2001 From: Petri Lehtinen Date: Thu, 29 Oct 2009 15:42:05 +0200 Subject: [PATCH] load: Parse a badly put - sign correctly Thanks to Manolis Delakis for reporting. --- src/load.c | 6 +++++- test/testdata/invalid | 17 ++++++++++++++++- test/testdata/invalid-strip | 17 ++++++++++++++++- 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 -- 2.1.4