Alexandre Julliard : oleaut32: Fix the overflow check in VarNumFromParseNum .

Alexandre Julliard julliard at winehq.org
Wed Nov 17 10:38:05 CST 2010


Module: wine
Branch: master
Commit: 4e94fd55676675a89ad46ca3d1fa3e8ef54b55b2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4e94fd55676675a89ad46ca3d1fa3e8ef54b55b2

Author: Alexandre Julliard <julliard at 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;




More information about the wine-cvs mailing list