diff --git a/dlls/jscript/json.c b/dlls/jscript/json.c index b5e6e10b90c..5a0ec145b30 100644 --- a/dlls/jscript/json.c +++ b/dlls/jscript/json.c @@ -261,19 +261,12 @@ static HRESULT parse_json_value(json_parse_ctx_t *ctx, jsval_t *r) skip_spaces(ctx); } - if(!isdigitW(*ctx->ptr)) + if(*ctx->ptr == '0' && ctx->ptr + 1 < ctx->end && isdigitW(ctx->ptr[1])) break; - if(*ctx->ptr == '0') { - ctx->ptr++; - n = 0; - if(is_identifier_char(*ctx->ptr)) - break; - }else { - hres = parse_decimal(&ctx->ptr, ctx->end, &n); - if(FAILED(hres)) - return hres; - } + hres = parse_decimal(&ctx->ptr, ctx->end, &n); + if(FAILED(hres)) + break; *r = jsval_number(sign*n); return S_OK; diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index ff6a6b781cf..38b2e666da5 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1887,7 +1887,10 @@ ok(isNaN(tmp), "Math.tan(-Infinity) is not NaN"); ["[false,{},{\"x\": []}]", [false,{},{x:[]}]], ["0", 0], ["- 1", -1], - ["1e2147483648", Infinity] + ["1e2147483648", Infinity], + ["0.5", 0.5], + ["0e5", 0], + [".5", 0.5] ]; function json_cmp(x, y) {