From 7b66e1aeeb1cf871dc9a979675f69fcdb83a4a87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Hentschel?= Date: Fri, 7 May 2010 18:01:26 +0200 Subject: [PATCH] oleaut32: Check if the delimiter is a date delimiter. --- dlls/oleaut32/tests/vartype.c | 4 ++++ dlls/oleaut32/vartype.c | 31 +++++++++++++------------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index 88ef2a4f22..2ee5fea8b5 100644 --- a/dlls/oleaut32/tests/vartype.c +++ b/dlls/oleaut32/tests/vartype.c @@ -3436,10 +3436,14 @@ static void test_VarDateFromStr(void) /* Native fails "1999 January 3, 9AM". I consider that a bug in native */ /* test a non-english data string */ + DFS("02.01.1970"); EXPECT_MISMATCH; DFS("02.01.1970 00:00:00"); EXPECT_MISMATCH; lcid = MAKELCID(MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN),SORT_DEFAULT); DFS("02.01.1970"); EXPECT_DBL(25570.0); DFS("02.01.1970 00:00:00"); EXPECT_DBL(25570.0); + lcid = MAKELCID(MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH),SORT_DEFAULT); + DFS("02.01.1970"); EXPECT_MISMATCH; + DFS("02.01.1970 00:00:00"); EXPECT_MISMATCH; } static void test_VarDateCopy(void) diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c index cfd5e8f835..33f6f902f4 100644 --- a/dlls/oleaut32/vartype.c +++ b/dlls/oleaut32/vartype.c @@ -7426,7 +7426,8 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2, LOCALE_SABBREVDAYNAME3, LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5, LOCALE_SABBREVDAYNAME6, LOCALE_SABBREVDAYNAME7, - LOCALE_S1159, LOCALE_S2359 + LOCALE_S1159, LOCALE_S2359, + LOCALE_SDATE }; static const BYTE ParseDateMonths[] = { @@ -7498,7 +7499,7 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd dp.dwFlags[dp.dwCount] |= (DP_MONTH|DP_DATESEP); dp.dwCount++; } - else if (i > 39) + else if (i > 39 && i < 42) { if (!dp.dwCount || dp.dwParseFlags & (DP_AM|DP_PM)) hRet = DISP_E_TYPEMISMATCH; @@ -7545,7 +7546,16 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd if (!dp.dwCount || !strIn[1]) hRet = DISP_E_TYPEMISMATCH; else - dp.dwFlags[dp.dwCount - 1] |= DP_TIMESEP; + if (tokens[42][0] == *strIn) + { + dwDateSeps++; + if (dwDateSeps > 2) + hRet = DISP_E_TYPEMISMATCH; + else + dp.dwFlags[dp.dwCount - 1] |= DP_DATESEP; + } + else + dp.dwFlags[dp.dwCount - 1] |= DP_TIMESEP; } else if (*strIn == '-' || *strIn == '/') { @@ -7607,14 +7617,6 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd break; case 0x3: /* TTT TTTDD TTTDDD */ - if (iDate && dp.dwCount == 3) - { - /* DDD */ - if ((dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM)) || - (dp.dwFlags[2] & (DP_AM|DP_PM))) - hRet = DISP_E_TYPEMISMATCH; - break; - } if (dp.dwCount > 4 && ((dp.dwFlags[3] & (DP_AM|DP_PM)) || (dp.dwFlags[4] & (DP_AM|DP_PM)) || (dp.dwFlags[5] & (DP_AM|DP_PM)))) @@ -7707,13 +7709,6 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd dp.dwCount -= 3; break; - case 0x1B: /* localized DDDTTT */ - if (!iDate) - { - hRet = DISP_E_TYPEMISMATCH; - break; - } - /* .. fall through .. */ case 0x18: /* DDDTTT */ if ((dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM)) || (dp.dwFlags[2] & (DP_AM|DP_PM))) -- 2.32.0.93.g670b81a890