From de70f7289e23e895956927e7e3ce2ed23a188e77 Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Thu, 22 Jul 2021 00:03:47 +0200 Subject: [PATCH] oleaut32: VarParseNumFromStr() does not allow leading thousands separators. Signed-off-by: Francois Gouget Signed-off-by: Alexandre Julliard --- dlls/oleaut32/tests/vartest.c | 4 ++-- dlls/oleaut32/variant.c | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c index 50af05e47cc..47dfbefc081 100644 --- a/dlls/oleaut32/tests/vartest.c +++ b/dlls/oleaut32/tests/vartest.c @@ -1606,7 +1606,7 @@ static void test_VarParseNumFromStrEn(void) /* With flag, but leading thousands separators are not allowed */ CONVERT(",1,000", NUMPRS_THOUSANDS); - todo_wine EXPECTFAIL; + EXPECTFAIL; /* With flag, thousands separator not needed but still reported */ CONVERT("1,", NUMPRS_THOUSANDS); @@ -1983,7 +1983,7 @@ static void test_VarParseNumFromStrFr(void) /* With flag, but leading thousands separators are not allowed */ CONVERT(" 1 000", NUMPRS_THOUSANDS); - todo_wine EXPECTFAIL; + EXPECTFAIL; /* With flag, thousands separator not needed but still reported */ CONVERT("1 ", NUMPRS_THOUSANDS|NUMPRS_USE_ALL); diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index fbcc8ce693f..35e4539c2ef 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -1652,6 +1652,12 @@ HRESULT WINAPI VarParseNumFromStr(const OLECHAR *lpszStr, LCID lcid, ULONG dwFla lpszStr++; } while (iswspace(*lpszStr)); } + else if (pNumprs->dwInFlags & NUMPRS_THOUSANDS && + ((chars.cDigitSeparator && *lpszStr == chars.cDigitSeparator) || + (cDigitSeparator2 && *lpszStr == cDigitSeparator2))) + { + return DISP_E_TYPEMISMATCH; /* Not allowed before the first digit */ + } else if (pNumprs->dwInFlags & NUMPRS_LEADING_PLUS && *lpszStr == chars.cPositiveSymbol && !(pNumprs->dwOutFlags & NUMPRS_LEADING_PLUS))