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>
This commit is contained in:
Huw Davies 2016-04-06 11:15:08 +01:00 committed by Alexandre Julliard
parent 2841a05025
commit b4a73f74af
2 changed files with 16 additions and 6 deletions

View File

@ -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 */

View File

@ -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)
{