load: Parse a badly put - sign correctly
authorPetri Lehtinen <petri@digip.org>
Thu, 29 Oct 2009 13:42:05 +0000 (15:42 +0200)
committerPetri Lehtinen <petri@digip.org>
Thu, 29 Oct 2009 13:45:16 +0000 (15:45 +0200)
Thanks to Manolis Delakis for reporting.

src/load.c
test/testdata/invalid
test/testdata/invalid-strip

index 53241ff..1ae62b3 100644 (file)
@@ -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;
index 1a70422..7fede67 100644 (file)
@@ -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
index 8b4a574..1efdc25 100644 (file)
@@ -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