Robert Shearman : oleaut32: Fix parsing of hex numbers with 'e' in the string by moving

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 3 05:22:46 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 123592f0c314efc801724a524a96f091857a6ae0
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=123592f0c314efc801724a524a96f091857a6ae0

Author: Robert Shearman <rob at codeweavers.com>
Date:   Sat Jul  1 13:28:52 2006 +0100

oleaut32: Fix parsing of hex numbers with 'e' in the string by moving
the exponent parsing to after the hex digit parsing.

---

 dlls/oleaut32/tests/vartest.c |    8 +++++---
 dlls/oleaut32/variant.c       |   35 ++++++++++++++++++-----------------
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c
index e8e4654..51c75e2 100644
--- a/dlls/oleaut32/tests/vartest.c
+++ b/dlls/oleaut32/tests/vartest.c
@@ -957,13 +957,15 @@ static void test_VarParseNumFromStr(void
   EXPECTRGB(4,FAILDIG);
 
   /* VB hex lower case and leading zero */
-  CONVERT("&h0abcd", NUMPRS_HEX_OCT);
-  EXPECT(4,NUMPRS_HEX_OCT,0x40,7,4,0);
+  CONVERT("&h0abcdef", NUMPRS_HEX_OCT);
+  EXPECT(6,NUMPRS_HEX_OCT,0x40,9,4,0);
   EXPECTRGB(0,10);
   EXPECTRGB(1,11);
   EXPECTRGB(2,12);
   EXPECTRGB(3,13);
-  EXPECTRGB(4,FAILDIG);
+  EXPECTRGB(4,14);
+  EXPECTRGB(5,15);
+  EXPECTRGB(6,FAILDIG);
 
   /* VB oct */
   CONVERT("&O300", NUMPRS_HEX_OCT);
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index ddeeabb..5ea767f 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -1732,23 +1732,6 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA
         }
       }
     }
-    else if ((*lpszStr == 'e' || *lpszStr == 'E') &&
-             pNumprs->dwInFlags & NUMPRS_EXPONENT &&
-             !(pNumprs->dwOutFlags & NUMPRS_EXPONENT))
-    {
-      dwState |= B_PROCESSING_EXPONENT;
-      pNumprs->dwOutFlags |= NUMPRS_EXPONENT;
-      cchUsed++;
-    }
-    else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol)
-    {
-      cchUsed++; /* Ignore positive exponent */
-    }
-    else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol)
-    {
-      dwState |= B_NEGATIVE_EXPONENT;
-      cchUsed++;
-    }
     else if (((*lpszStr >= 'a' && *lpszStr <= 'f') ||
              (*lpszStr >= 'A' && *lpszStr <= 'F')) &&
              dwState & B_PROCESSING_HEX)
@@ -1767,6 +1750,23 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA
       pNumprs->cDig++;
       cchUsed++;
     }
+    else if ((*lpszStr == 'e' || *lpszStr == 'E') &&
+             pNumprs->dwInFlags & NUMPRS_EXPONENT &&
+             !(pNumprs->dwOutFlags & NUMPRS_EXPONENT))
+    {
+      dwState |= B_PROCESSING_EXPONENT;
+      pNumprs->dwOutFlags |= NUMPRS_EXPONENT;
+      cchUsed++;
+    }
+    else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol)
+    {
+      cchUsed++; /* Ignore positive exponent */
+    }
+    else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol)
+    {
+      dwState |= B_NEGATIVE_EXPONENT;
+      cchUsed++;
+    }
     else
       break; /* Stop at an unrecognised character */
 
@@ -1783,6 +1783,7 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA
   if (pNumprs->dwOutFlags & NUMPRS_EXPONENT && dwState & B_PROCESSING_EXPONENT)
   {
     pNumprs->cchUsed = cchUsed;
+    WARN("didn't completely parse exponent\n");
     return DISP_E_TYPEMISMATCH; /* Failed to completely parse the exponent */
   }
 




More information about the wine-cvs mailing list