[PATCH] [Bug 7894] Convert to VT_DECIMAL fails with overflow (with
test)
Jason Edmeades
us at edmeades.me.uk
Mon Apr 2 14:51:55 CDT 2007
---
dlls/oleaut32/tests/vartest.c | 7 +++++++
dlls/oleaut32/variant.c | 2 +-
2 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c
index 44cc5c3..7de21bd 100644
--- a/dlls/oleaut32/tests/vartest.c
+++ b/dlls/oleaut32/tests/vartest.c
@@ -1391,6 +1391,11 @@ static const char *szFailOk = "Call failed, hres = %08x\n";
#define EXPECT_CY(val) EXPECT_OK { EXPECT_TYPE(VT_CY); \
ok(V_CY(&vOut).int64 == (LONG64)(val * CY_MULTIPLIER), "Expected r8 = 0x%x%08x, got 0x%x%08x\n", \
(DWORD)((LONG64)val >> 23), (DWORD)(LONG64)val, (DWORD)(V_CY(&vOut).int64 >>32), (DWORD)V_CY(&vOut).int64); }
+#define EXPECT_DECIMAL(valHi, valMid, valLo) EXPECT_OK { EXPECT_TYPE(VT_DECIMAL); \
+ ok((V_DECIMAL(&vOut).Hi32 == valHi) && (V_DECIMAL(&vOut).Mid32 == valMid) && \
+ (V_DECIMAL(&vOut).Lo32 == valLo), \
+ "Expected decimal = %x/0x%x%08x, got %x/0x%x%08x\n", valHi, valMid, valLo, \
+ V_DECIMAL(&vOut).Hi32, V_DECIMAL(&vOut).Mid32, V_DECIMAL(&vOut).Lo32); }
static void test_VarNumFromParseNum(void)
{
@@ -1454,6 +1459,8 @@ static void test_VarNumFromParseNum(void)
/* 0x7f */
SETRGB(0, 7); SETRGB(1, 0xf);
CONVERT(2,0,0,2,4,0, INTEGER_VTBITS); EXPECT_I1(0x7f);
+ SETRGB(0, 7); SETRGB(1, 0xf);
+ CONVERT(2,0,0,2,4,0, VTBIT_DECIMAL); EXPECT_DECIMAL(0,0,0x7f);
/* 0x7fff */
SETRGB(0, 7); SETRGB(1, 0xf); SETRGB(2, 0xf); SETRGB(3, 0xf);
CONVERT(4,0,0,4,4,0, INTEGER_VTBITS); EXPECT_I2(0x7fff);
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index 37fdea2..d851a9b 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -2019,7 +2019,7 @@ HRESULT WINAPI VarNumFromParseNum(NUMPARSE *pNumprs, BYTE *rgbDig,
V_UI8(pVarDst) = ul64;
return S_OK;
}
- else if ((dwVtBits & REAL_VTBITS) == VTBIT_DECIMAL)
+ else if ((dwVtBits & VTBIT_DECIMAL) == VTBIT_DECIMAL)
{
V_VT(pVarDst) = VT_DECIMAL;
DEC_SIGNSCALE(&V_DECIMAL(pVarDst)) = SIGNSCALE(DECIMAL_POS,0);
--
1.5.0
More information about the wine-patches
mailing list