Jacek Caban : oleaut32: Fix checks for digit characters.

Alexandre Julliard julliard at winehq.org
Tue Nov 12 16:56:07 CST 2019


Module: wine
Branch: master
Commit: db77f535073b7b9c29d923870104b4bbd86f881f
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=db77f535073b7b9c29d923870104b4bbd86f881f

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Nov 12 20:50:17 2019 +0100

oleaut32: Fix checks for digit characters.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/oleaut32/tests/vartest.c |  6 ++++++
 dlls/oleaut32/variant.c       | 11 ++++++++---
 dlls/oleaut32/vartype.c       |  2 +-
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c
index 0b1ac0f1cd..1bd40ac6bc 100644
--- a/dlls/oleaut32/tests/vartest.c
+++ b/dlls/oleaut32/tests/vartest.c
@@ -1312,6 +1312,7 @@ static void test_VarParseNumFromStr(void)
   LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
   NUMPARSE np;
   BYTE rgb[128];
+  WCHAR str[128];
 
   /** No flags **/
 
@@ -1734,6 +1735,11 @@ static void test_VarParseNumFromStr(void)
   CONVERT("0.10", NUMPRS_STD);
   EXPECT(1,NUMPRS_STD,NUMPRS_DECIMAL,4,0,-1);
   EXPECT2(1,0);
+
+  str[0] = 0x0660;
+  str[1] = 0;
+  hres = pVarParseNumFromStr(str, lcid, LOCALE_NOUSEROVERRIDE, &np, rgb);
+  ok(hres == DISP_E_TYPEMISMATCH, "VarParseNumFromStr returned %08x\n", hres);
 }
 
 static HRESULT (WINAPI *pVarNumFromParseNum)(NUMPARSE*,BYTE*,ULONG,VARIANT*);
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index ce96ba1456..36191b6b42 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -1571,6 +1571,11 @@ static void VARIANT_GetLocalisedNumberChars(VARIANT_NUMBER_CHARS *lpChars, LCID
 #define B_PROCESSING_HEX      0x20
 #define B_PROCESSING_OCT      0x40
 
+static inline BOOL is_digit(WCHAR c)
+{
+    return '0' <= c && c <= '9';
+}
+
 /**********************************************************************
  *              VarParseNumFromStr [OLEAUT32.46]
  *
@@ -1714,14 +1719,14 @@ HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags,
 
   while (*lpszStr)
   {
-    if (iswdigit(*lpszStr))
+    if (is_digit(*lpszStr))
     {
       if (dwState & B_PROCESSING_EXPONENT)
       {
         int exponentSize = 0;
         if (dwState & B_EXPONENT_START)
         {
-          if (!iswdigit(*lpszStr))
+          if (!is_digit(*lpszStr))
             break; /* No exponent digits - invalid */
           while (*lpszStr == '0')
           {
@@ -1731,7 +1736,7 @@ HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags,
           }
         }
 
-        while (iswdigit(*lpszStr))
+        while (is_digit(*lpszStr))
         {
           exponentSize *= 10;
           exponentSize += *lpszStr - '0';
diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c
index 75d883a909..4201a53642 100644
--- a/dlls/oleaut32/vartype.c
+++ b/dlls/oleaut32/vartype.c
@@ -7657,7 +7657,7 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd
   /* Parse the string into our structure */
   while (*strIn)
   {
-    if (iswdigit(*strIn))
+    if ('0' <= *strIn && *strIn <= '9')
     {
       if (dp.dwCount >= 6)
       {




More information about the wine-cvs mailing list