jscript: Better handling of to_integer result in String.charCodeAt.
This commit is contained in:
parent
0143201eac
commit
621180e81c
@ -350,6 +350,7 @@ static HRESULT String_charCodeAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
|
|||||||
|
|
||||||
if(arg_cnt(dp) > 0) {
|
if(arg_cnt(dp) > 0) {
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
|
double d;
|
||||||
|
|
||||||
hres = to_integer(ctx, get_arg(dp, 0), ei, &v);
|
hres = to_integer(ctx, get_arg(dp, 0), ei, &v);
|
||||||
if(FAILED(hres)) {
|
if(FAILED(hres)) {
|
||||||
@ -357,13 +358,16 @@ static HRESULT String_charCodeAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
|
|||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(V_VT(&v) != VT_I4 || V_I4(&v) < 0 || V_I4(&v) >= length) {
|
d = num_val(&v);
|
||||||
if(retv) num_set_nan(&v);
|
|
||||||
|
if(!is_int32(d) || d < 0 || d >= length) {
|
||||||
SysFreeString(val_str);
|
SysFreeString(val_str);
|
||||||
|
if(retv)
|
||||||
|
num_set_nan(retv);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
idx = V_I4(&v);
|
idx = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(retv) {
|
if(retv) {
|
||||||
|
@ -329,6 +329,8 @@ tmp = "\052".charCodeAt(0);
|
|||||||
ok(tmp === 0x2A, "'\052'.charCodeAt(0) = " + tmp);
|
ok(tmp === 0x2A, "'\052'.charCodeAt(0) = " + tmp);
|
||||||
tmp = "\xa2".charCodeAt(0);
|
tmp = "\xa2".charCodeAt(0);
|
||||||
ok(tmp === 0xA2, "'\xa2'.charCodeAt(0) = " + tmp);
|
ok(tmp === 0xA2, "'\xa2'.charCodeAt(0) = " + tmp);
|
||||||
|
tmp = "abc".charCodeAt(bigInt);
|
||||||
|
ok(isNaN(tmp), "'abc'.charCodeAt(bigInt) = " + tmp);
|
||||||
|
|
||||||
tmp = "abcd".substring(1,3);
|
tmp = "abcd".substring(1,3);
|
||||||
ok(tmp === "bc", "'abcd'.substring(1,3) = " + tmp);
|
ok(tmp === "bc", "'abcd'.substring(1,3) = " + tmp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user