diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index 03f43ec456f..7d50545e6cc 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 bf7ebc6d1c0..fc5a0259c19 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) {