Jacek Caban : jscript: Use parse_decimal for parsing JSON numeric literals starting with 0.

Alexandre Julliard julliard at winehq.org
Thu Mar 21 17:21:20 CDT 2019


Module: wine
Branch: master
Commit: b9a57de04840c6b234ff4102e25f6978f8f60c1b
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b9a57de04840c6b234ff4102e25f6978f8f60c1b

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Mar 21 14:55:55 2019 +0100

jscript: Use parse_decimal for parsing JSON numeric literals starting with 0.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/jscript/json.c       | 15 ++++-----------
 dlls/jscript/tests/api.js |  5 ++++-
 2 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/dlls/jscript/json.c b/dlls/jscript/json.c
index b5e6e10..5a0ec14 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 ff6a6b7..38b2e66 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) {




More information about the wine-cvs mailing list