Module: wine Branch: refs/heads/master Commit: 123592f0c314efc801724a524a96f091857a6ae0 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=123592f0c314efc801724a52...
Author: Robert Shearman rob@codeweavers.com Date: Sat Jul 1 13:28:52 2006 +0100
oleaut32: Fix parsing of hex numbers with 'e' in the string by moving the exponent parsing to after the hex digit parsing.
---
dlls/oleaut32/tests/vartest.c | 8 +++++--- dlls/oleaut32/variant.c | 35 ++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c index e8e4654..51c75e2 100644 --- a/dlls/oleaut32/tests/vartest.c +++ b/dlls/oleaut32/tests/vartest.c @@ -957,13 +957,15 @@ static void test_VarParseNumFromStr(void EXPECTRGB(4,FAILDIG);
/* VB hex lower case and leading zero */ - CONVERT("&h0abcd", NUMPRS_HEX_OCT); - EXPECT(4,NUMPRS_HEX_OCT,0x40,7,4,0); + CONVERT("&h0abcdef", NUMPRS_HEX_OCT); + EXPECT(6,NUMPRS_HEX_OCT,0x40,9,4,0); EXPECTRGB(0,10); EXPECTRGB(1,11); EXPECTRGB(2,12); EXPECTRGB(3,13); - EXPECTRGB(4,FAILDIG); + EXPECTRGB(4,14); + EXPECTRGB(5,15); + EXPECTRGB(6,FAILDIG);
/* VB oct */ CONVERT("&O300", NUMPRS_HEX_OCT); diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index ddeeabb..5ea767f 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -1732,23 +1732,6 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA } } } - else if ((*lpszStr == 'e' || *lpszStr == 'E') && - pNumprs->dwInFlags & NUMPRS_EXPONENT && - !(pNumprs->dwOutFlags & NUMPRS_EXPONENT)) - { - dwState |= B_PROCESSING_EXPONENT; - pNumprs->dwOutFlags |= NUMPRS_EXPONENT; - cchUsed++; - } - else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol) - { - cchUsed++; /* Ignore positive exponent */ - } - else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol) - { - dwState |= B_NEGATIVE_EXPONENT; - cchUsed++; - } else if (((*lpszStr >= 'a' && *lpszStr <= 'f') || (*lpszStr >= 'A' && *lpszStr <= 'F')) && dwState & B_PROCESSING_HEX) @@ -1767,6 +1750,23 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA pNumprs->cDig++; cchUsed++; } + else if ((*lpszStr == 'e' || *lpszStr == 'E') && + pNumprs->dwInFlags & NUMPRS_EXPONENT && + !(pNumprs->dwOutFlags & NUMPRS_EXPONENT)) + { + dwState |= B_PROCESSING_EXPONENT; + pNumprs->dwOutFlags |= NUMPRS_EXPONENT; + cchUsed++; + } + else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol) + { + cchUsed++; /* Ignore positive exponent */ + } + else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol) + { + dwState |= B_NEGATIVE_EXPONENT; + cchUsed++; + } else break; /* Stop at an unrecognised character */
@@ -1783,6 +1783,7 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA if (pNumprs->dwOutFlags & NUMPRS_EXPONENT && dwState & B_PROCESSING_EXPONENT) { pNumprs->cchUsed = cchUsed; + WARN("didn't completely parse exponent\n"); return DISP_E_TYPEMISMATCH; /* Failed to completely parse the exponent */ }