Module: wine Branch: master Commit: b4a73f74af5bc4f7b56cbf239dda60eda11bbffc URL: http://source.winehq.org/git/wine.git/?a=commit;h=b4a73f74af5bc4f7b56cbf239d...
Author: Huw Davies huw@codeweavers.com Date: Wed Apr 6 11:15:08 2016 +0100
oleaut32: Fix VarDateFromStr for the case of a trailing meridiem indicator.
Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/oleaut32/tests/vartype.c | 3 +++ dlls/oleaut32/vartype.c | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-)
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) {