vbscript: Overflow hex literals in 16-bit range.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
05a5e606d5
commit
cd1918948f
|
@ -2793,7 +2793,7 @@ static const builtin_prop_t global_props[] = {
|
||||||
{L"vbFormFeed", NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbFormFeed},
|
{L"vbFormFeed", NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbFormFeed},
|
||||||
{L"vbFriday", NULL, BP_GET, VT_I2, 6},
|
{L"vbFriday", NULL, BP_GET, VT_I2, 6},
|
||||||
{L"vbGeneralDate", NULL, BP_GET, VT_I2, 0},
|
{L"vbGeneralDate", NULL, BP_GET, VT_I2, 0},
|
||||||
{L"vbGreen", NULL, BP_GET, VT_I4, 0x00ff00},
|
{L"vbGreen", NULL, BP_GET, VT_I4, (INT16)0x00ff00},
|
||||||
{L"vbIgnore", NULL, BP_GET, VT_I2, IDIGNORE},
|
{L"vbIgnore", NULL, BP_GET, VT_I2, IDIGNORE},
|
||||||
{L"vbInformation", NULL, BP_GET, VT_I2, MB_ICONASTERISK},
|
{L"vbInformation", NULL, BP_GET, VT_I2, MB_ICONASTERISK},
|
||||||
{L"vbInteger", NULL, BP_GET, VT_I2, VT_I2},
|
{L"vbInteger", NULL, BP_GET, VT_I2, VT_I2},
|
||||||
|
@ -2840,7 +2840,7 @@ static const builtin_prop_t global_props[] = {
|
||||||
{L"vbVerticalTab", NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbVerticalTab},
|
{L"vbVerticalTab", NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbVerticalTab},
|
||||||
{L"vbWednesday", NULL, BP_GET, VT_I2, 4},
|
{L"vbWednesday", NULL, BP_GET, VT_I2, 4},
|
||||||
{L"vbWhite", NULL, BP_GET, VT_I4, 0xffffff},
|
{L"vbWhite", NULL, BP_GET, VT_I4, 0xffffff},
|
||||||
{L"vbYellow", NULL, BP_GET, VT_I4, 0x00ffff},
|
{L"vbYellow", NULL, BP_GET, VT_I4, (INT16)0x00ffff},
|
||||||
{L"vbYes", NULL, BP_GET, VT_I2, IDYES},
|
{L"vbYes", NULL, BP_GET, VT_I2, IDYES},
|
||||||
{L"vbYesNo", NULL, BP_GET, VT_I2, MB_YESNO},
|
{L"vbYesNo", NULL, BP_GET, VT_I2, MB_YESNO},
|
||||||
{L"vbYesNoCancel", NULL, BP_GET, VT_I2, MB_YESNOCANCEL},
|
{L"vbYesNoCancel", NULL, BP_GET, VT_I2, MB_YESNOCANCEL},
|
||||||
|
@ -2945,7 +2945,7 @@ static HRESULT Err_Raise(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VA
|
||||||
if(SUCCEEDED(hres)) {
|
if(SUCCEEDED(hres)) {
|
||||||
script_ctx_t *ctx = This->ctx;
|
script_ctx_t *ctx = This->ctx;
|
||||||
|
|
||||||
error = (code & ~0xffff) ? map_hres(code) : MAKE_VBSERROR(code);
|
error = (code == (INT16)code) ? MAKE_VBSERROR((UINT16)code) : map_hres(code);
|
||||||
|
|
||||||
if(source) {
|
if(source) {
|
||||||
SysFreeString(ctx->ei.bstrSource);
|
SysFreeString(ctx->ei.bstrSource);
|
||||||
|
|
|
@ -310,7 +310,7 @@ static int hex_to_int(WCHAR c)
|
||||||
static int parse_hex_literal(parser_ctx_t *ctx, LONG *ret)
|
static int parse_hex_literal(parser_ctx_t *ctx, LONG *ret)
|
||||||
{
|
{
|
||||||
const WCHAR *begin = ctx->ptr;
|
const WCHAR *begin = ctx->ptr;
|
||||||
LONG l = 0, d;
|
unsigned l = 0, d;
|
||||||
|
|
||||||
while((d = hex_to_int(*++ctx->ptr)) != -1)
|
while((d = hex_to_int(*++ctx->ptr)) != -1)
|
||||||
l = l*16 + d;
|
l = l*16 + d;
|
||||||
|
@ -323,7 +323,7 @@ static int parse_hex_literal(parser_ctx_t *ctx, LONG *ret)
|
||||||
if(*ctx->ptr == '&')
|
if(*ctx->ptr == '&')
|
||||||
ctx->ptr++;
|
ctx->ptr++;
|
||||||
|
|
||||||
*ret = l;
|
*ret = l == (UINT16)l ? (INT16)l : l;
|
||||||
return tInt;
|
return tInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,8 @@ Call ok(true = -1, "! true = -1")
|
||||||
Call ok(false = 0, "false <> 0")
|
Call ok(false = 0, "false <> 0")
|
||||||
Call ok(&hff = 255, "&hff <> 255")
|
Call ok(&hff = 255, "&hff <> 255")
|
||||||
Call ok(&Hff = 255, "&Hff <> 255")
|
Call ok(&Hff = 255, "&Hff <> 255")
|
||||||
|
Call ok(&hffff = -1, "&hffff <> -1")
|
||||||
|
Call ok(&hfffe = -2, "&hfffe <> -2")
|
||||||
|
|
||||||
W = 5
|
W = 5
|
||||||
Call ok(W = 5, "W = " & W & " expected " & 5)
|
Call ok(W = 5, "W = " & W & " expected " & 5)
|
||||||
|
@ -88,6 +90,7 @@ Call ok(getVT(&h10&) = "VT_I2", "getVT(&h10&) is not VT_I2")
|
||||||
Call ok(getVT(&h10000&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
|
Call ok(getVT(&h10000&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
|
||||||
Call ok(getVT(&H10000&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
|
Call ok(getVT(&H10000&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
|
||||||
Call ok(getVT(&hffFFffFF&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
|
Call ok(getVT(&hffFFffFF&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
|
||||||
|
Call ok(getVT(&hffFFffFE&) = "VT_I2", "getVT(&hffFFffFE &) is not VT_I2")
|
||||||
Call ok(getVT(1e2) = "VT_R8", "getVT(1e2) is not VT_R8")
|
Call ok(getVT(1e2) = "VT_R8", "getVT(1e2) is not VT_R8")
|
||||||
Call ok(getVT(1e0) = "VT_R8", "getVT(1e0) is not VT_R8")
|
Call ok(getVT(1e0) = "VT_R8", "getVT(1e0) is not VT_R8")
|
||||||
Call ok(getVT(0.1e2) = "VT_R8", "getVT(0.1e2) is not VT_R8")
|
Call ok(getVT(0.1e2) = "VT_R8", "getVT(0.1e2) is not VT_R8")
|
||||||
|
|
Loading…
Reference in New Issue