Module: wine Branch: master Commit: 4e94fd55676675a89ad46ca3d1fa3e8ef54b55b2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4e94fd55676675a89ad46ca3d1...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Nov 17 13:42:50 2010 +0100
oleaut32: Fix the overflow check in VarNumFromParseNum.
Spotted by Adam Martinson.
---
dlls/oleaut32/tests/vartype.c | 4 +++- dlls/oleaut32/variant.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index fe089bd..279fd7b 100644 --- a/dlls/oleaut32/tests/vartype.c +++ b/dlls/oleaut32/tests/vartype.c @@ -2592,7 +2592,9 @@ static void test_VarUI8FromStr(void) CONVERT_STR(VarUI8FromStr,"0",0); EXPECTI8(0); CONVERT_STR(VarUI8FromStr,"-1",0); EXPECT_OVERFLOW; CONVERT_STR(VarUI8FromStr,"2147483647",0); EXPECTI8(2147483647); - CONVERT_STR(VarUI8FromStr,"18446744073709551615",0); todo_wine EXPECTI864(0xFFFFFFFF,0xFFFFFFFF); + CONVERT_STR(VarUI8FromStr,"18446744073709551614",0); EXPECTI864(0xFFFFFFFF,0xFFFFFFFE); + CONVERT_STR(VarUI8FromStr,"18446744073709551615",0); EXPECTI864(0xFFFFFFFF,0xFFFFFFFF); + CONVERT_STR(VarUI8FromStr,"18446744073709551616",0); EXPECT_OVERFLOW;
CONVERT_STR(VarUI8FromStr,"-1.5",LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; CONVERT_STR(VarUI8FromStr,"-0.6",LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index 92a86fd..776c0e7 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -2186,7 +2186,7 @@ HRESULT WINAPI VarNumFromParseNum(NUMPARSE *pNumprs, BYTE *rgbDig, /* Convert the integer part of the number into a UI8 */ for (i = 0; i < wholeNumberDigits; i++) { - if (ul64 > (UI8_MAX / 10 - rgbDig[i])) + if (ul64 > UI8_MAX / 10 || (ul64 == UI8_MAX / 10 && rgbDig[i] > UI8_MAX % 10)) { TRACE("Overflow multiplying digits\n"); bOverflow = TRUE;