oleaut32: VarParseNumFromStr() accepts trailing currency symbols.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51450
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e02a7e579c
)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
This commit is contained in:
parent
e4ea517b6c
commit
bf217a1a47
|
@ -1641,7 +1641,7 @@ static void test_VarParseNumFromStrEn(void)
|
|||
|
||||
/* With flag, but is allowed after the amount and can even be repeated! */
|
||||
CONVERT("$11$$", NUMPRS_CURRENCY|NUMPRS_USE_ALL);
|
||||
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
|
||||
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
|
||||
EXPECT2(1,1);
|
||||
EXPECTRGB(2,FAILDIG);
|
||||
|
||||
|
@ -1687,7 +1687,7 @@ static void test_VarParseNumFromStrEn(void)
|
|||
|
||||
/* With flag, unless explicitly allowed */
|
||||
WCONVERT(wstr, NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL);
|
||||
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
|
||||
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
|
||||
EXPECT2(1,1);
|
||||
EXPECTRGB(2,FAILDIG);
|
||||
|
||||
|
@ -2005,7 +2005,7 @@ static void test_VarParseNumFromStrFr(void)
|
|||
|
||||
/* With flag, consumes all currency signs! "E12EE" */
|
||||
WCONVERT(L"\x20ac\x31\x32\x20ac\x20ac", NUMPRS_CURRENCY|NUMPRS_USE_ALL);
|
||||
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
|
||||
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
|
||||
EXPECT2(1,2);
|
||||
EXPECTRGB(2,FAILDIG);
|
||||
|
||||
|
@ -2024,12 +2024,12 @@ static void test_VarParseNumFromStrFr(void)
|
|||
if (spaces[i] == ' ' || spaces[i] == 0xa0 /* non-breaking space */)
|
||||
{
|
||||
/* Spaces aliased to thousands separator are never allowed! */
|
||||
EXPECTFAIL;
|
||||
todo_wine EXPECTFAIL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The others behave normally */
|
||||
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
|
||||
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
|
||||
EXPECT2(1,2);
|
||||
EXPECTRGB(2,FAILDIG);
|
||||
}
|
||||
|
@ -2038,7 +2038,7 @@ static void test_VarParseNumFromStrFr(void)
|
|||
if (spaces[i] == ' ' || spaces[i] == 0xa0 /* non-breaking space */)
|
||||
{
|
||||
/* Spaces aliased to thousands separator are never allowed! */
|
||||
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_THOUSANDS|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_THOUSANDS,4,0,0);
|
||||
todo_wine_if(i==0) EXPECT(2,NUMPRS_CURRENCY|NUMPRS_THOUSANDS|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_THOUSANDS,4,0,0);
|
||||
EXPECT2(1,2);
|
||||
EXPECTRGB(2,FAILDIG);
|
||||
}
|
||||
|
@ -2059,7 +2059,7 @@ static void test_VarParseNumFromStrFr(void)
|
|||
|
||||
/* With flag and decimal flag, consumes decimal point and following digits */
|
||||
WCONVERT(L"12,1\x20ac", NUMPRS_CURRENCY|NUMPRS_DECIMAL|NUMPRS_USE_ALL);
|
||||
todo_wine EXPECT(3,NUMPRS_CURRENCY|NUMPRS_DECIMAL|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_DECIMAL,5,0,-1);
|
||||
EXPECT(3,NUMPRS_CURRENCY|NUMPRS_DECIMAL|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_DECIMAL,5,0,-1);
|
||||
EXPECT2(1,2);
|
||||
EXPECTRGB(2,1);
|
||||
EXPECTRGB(3,FAILDIG);
|
||||
|
@ -2158,7 +2158,7 @@ static void test_VarParseNumFromStrMisc(void)
|
|||
|
||||
/* Multi-character currencies can be repeated too "zl2zlzl" */
|
||||
WCONVERT(L"z\x142\x32z\x142z\x142", NUMPRS_CURRENCY|NUMPRS_USE_ALL);
|
||||
todo_wine EXPECT(1,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,7,0,0);
|
||||
EXPECT(1,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,7,0,0);
|
||||
EXPECT2(2,FAILDIG);
|
||||
|
||||
lcid = MAKELCID(MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_SWISS),SORT_DEFAULT);
|
||||
|
|
|
@ -1940,6 +1940,14 @@ HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags,
|
|||
lpszStr++;
|
||||
pNumprs->dwOutFlags |= NUMPRS_NEG;
|
||||
}
|
||||
else if (pNumprs->dwInFlags & NUMPRS_CURRENCY &&
|
||||
*lpszStr == chars.cCurrencyLocal &&
|
||||
(!chars.cCurrencyLocal2 || lpszStr[1] == chars.cCurrencyLocal2))
|
||||
{
|
||||
pNumprs->dwOutFlags |= NUMPRS_CURRENCY;
|
||||
cchUsed += chars.cCurrencyLocal2 ? 2 : 1;
|
||||
lpszStr += chars.cCurrencyLocal2 ? 2 : 1;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue