[PATCH v2] oleaut32: Fix VarDateFromStr for the case of a trailing meridiem indicator.

Huw Davies huw at codeweavers.com
Wed Apr 6 05:15:08 CDT 2016


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/oleaut32/tests/vartype.c |  3 +++
 dlls/oleaut32/vartype.c       | 19 +++++++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

This time with a sign-off (changed config and forgot to add this).

diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c
index 03f43ec..7d50545 100644
--- a/dlls/oleaut32/tests/vartype.c
+++ b/dlls/oleaut32/tests/vartype.c
@@ -3528,6 +3528,9 @@ static void test_VarDateFromStr(void)
   DFS("1-2-1970");        EXPECT_DBL(25570.0);
   DFS("13-1-1970");       EXPECT_DBL(25581.0);
   DFS("1970-1-13");       EXPECT_DBL(25581.0);
+  DFS("6/30/2011 01:20:34");          EXPECT_DBL(40724.05594907407);
+  DFS("6/30/2011 01:20:34 AM");       EXPECT_DBL(40724.05594907407);
+  DFS("6/30/2011 01:20:34 PM");       EXPECT_DBL(40724.55594907407);
   /* Native fails "1999 January 3, 9AM". I consider that a bug in native */
 
   /* test a non-english data string */
diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c
index bf7ebc6..fc5a025 100644
--- a/dlls/oleaut32/vartype.c
+++ b/dlls/oleaut32/vartype.c
@@ -7668,11 +7668,13 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd
   /* Parse the string into our structure */
   while (*strIn)
   {
-    if (dp.dwCount >= 6)
-      break;
-
     if (isdigitW(*strIn))
     {
+      if (dp.dwCount >= 6)
+      {
+        hRet = DISP_E_TYPEMISMATCH;
+        break;
+      }
       dp.dwValues[dp.dwCount] = strtoulW(strIn, &strIn, 10);
       dp.dwCount++;
       strIn--;
@@ -7688,9 +7690,14 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd
         {
           if (i <= 25)
           {
-            dp.dwValues[dp.dwCount] = ParseDateMonths[i];
-            dp.dwFlags[dp.dwCount] |= (DP_MONTH|DP_DATESEP);
-            dp.dwCount++;
+            if (dp.dwCount >= 6)
+              hRet = DISP_E_TYPEMISMATCH;
+            else
+            {
+              dp.dwValues[dp.dwCount] = ParseDateMonths[i];
+              dp.dwFlags[dp.dwCount] |= (DP_MONTH|DP_DATESEP);
+              dp.dwCount++;
+            }
           }
           else if (i > 39 && i < 42)
           {
-- 
2.8.0




More information about the wine-patches mailing list