From f9c2a113bb09a4ccff3f7ba92d639ad3b40ee693 Mon Sep 17 00:00:00 2001 From: Petri Lehtinen Date: Sat, 4 Jul 2009 13:18:49 +0300 Subject: [PATCH] Fix number tokenizer --- src/load.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/load.c b/src/load.c index 9317521..ca87d3c 100644 --- a/src/load.c +++ b/src/load.c @@ -170,28 +170,32 @@ static void json_scan_number(json_lex *lex) if(*p == '-') p++; - if(*p == '0') + if(*p == '0') { p++; + if(isdigit(*p)) + goto out; + } else /* *p != '0' */ { p++; while(isdigit(*p)) p++; } - if(*p != '.') { + if(*p != '.' && *p != 'E' && *p != 'e') { lex->token = JSON_TOKEN_INTEGER; lex->value.integer = strtol(lex->start, &end, 10); assert(end == p); - lex->input = p; - return; + goto out; } - else /* *p == '.' */ { + + if(*p == '.') { p++; - if(!isdigit(*(p++))) + if(!isdigit(*p)) goto out; + p++; while(isdigit(*p)) p++; } @@ -201,9 +205,10 @@ static void json_scan_number(json_lex *lex) if(*p == '+' || *p == '-') p++; - if(!isdigit(*(p++))) + if(!isdigit(*p)) goto out; + p++; while(isdigit(*p)) p++; } -- 2.7.4