From 4fde6d413862b0510ff68ecdb0804e292f6e3104 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 11 Apr 2018 19:36:11 +0200 Subject: [PATCH] jscript: Properly parse large hexadecimal listerals. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/jscript/lex.c | 8 ++++---- dlls/jscript/tests/lang.js | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dlls/jscript/lex.c b/dlls/jscript/lex.c index b4f6d95ba22..b4cc82a2599 100644 --- a/dlls/jscript/lex.c +++ b/dlls/jscript/lex.c @@ -487,18 +487,18 @@ static BOOL parse_numeric_literal(parser_ctx_t *ctx, double *ret) HRESULT hres; if(*ctx->ptr == '0') { - LONG d, l = 0; - ctx->ptr++; if(*ctx->ptr == 'x' || *ctx->ptr == 'X') { + double r = 0; + int d; if(++ctx->ptr == ctx->end) { ERR("unexpected end of file\n"); return FALSE; } while(ctx->ptr < ctx->end && (d = hex_to_int(*ctx->ptr)) != -1) { - l = l*16 + d; + r = r*16 + d; ctx->ptr++; } @@ -508,7 +508,7 @@ static BOOL parse_numeric_literal(parser_ctx_t *ctx, double *ret) return FALSE; } - *ret = l; + *ret = r; return TRUE; } diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index 93502004651..e6ff4dd059b 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -48,6 +48,9 @@ tmp = 07777777777777777777777; ok(typeof(tmp) === "number" && tmp > 0xffffffff, "tmp = " + tmp); tmp = 07777777779777777777777; ok(typeof(tmp) === "number" && tmp > 0xffffffff, "tmp = " + tmp); +ok(0xffffffff === 4294967295, "0xffffffff = " + 0xffffffff); +tmp = 0x10000000000000000000000000000000000000000000000000000000000000000; +ok(tmp === Math.pow(2, 256), "0x1000...00 != 2^256"); ok(1 !== 2, "1 !== 2 is false"); ok(null !== undefined, "null !== undefined is false");