diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index bf9312d64b4..9f6dc4f9ce0 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -350,6 +350,7 @@ static HRESULT String_charCodeAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, if(arg_cnt(dp) > 0) { VARIANT v; + double d; hres = to_integer(ctx, get_arg(dp, 0), ei, &v); if(FAILED(hres)) { @@ -357,13 +358,16 @@ static HRESULT String_charCodeAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, return hres; } - if(V_VT(&v) != VT_I4 || V_I4(&v) < 0 || V_I4(&v) >= length) { - if(retv) num_set_nan(&v); + d = num_val(&v); + + if(!is_int32(d) || d < 0 || d >= length) { SysFreeString(val_str); + if(retv) + num_set_nan(retv); return S_OK; } - idx = V_I4(&v); + idx = d; } if(retv) { diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index f92cd48e22a..861019f4789 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -329,6 +329,8 @@ tmp = "\052".charCodeAt(0); ok(tmp === 0x2A, "'\052'.charCodeAt(0) = " + tmp); tmp = "\xa2".charCodeAt(0); ok(tmp === 0xA2, "'\xa2'.charCodeAt(0) = " + tmp); +tmp = "abc".charCodeAt(bigInt); +ok(isNaN(tmp), "'abc'.charCodeAt(bigInt) = " + tmp); tmp = "abcd".substring(1,3); ok(tmp === "bc", "'abcd'.substring(1,3) = " + tmp);