From d1469144e9a5e300223703cb69d32e6e6c25b28b Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 1 May 2014 12:14:27 +0200 Subject: [PATCH] oleaut32: Handle VariantCopy errors in VariantChangeTypeEx. --- dlls/oleaut32/tests/vartype.c | 7 +++++++ dlls/oleaut32/variant.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index ea5065fb465..b873d82275d 100644 --- a/dlls/oleaut32/tests/vartype.c +++ b/dlls/oleaut32/tests/vartype.c @@ -6269,6 +6269,13 @@ static void test_ChangeType_keep_dst(void) hres = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_INT); ok(hres == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx returns %08x\n", hres); ok(V_VT(&v2) == VT_INT && V_INT(&v2) == 4, "VariantChangeTypeEx changed dst variant\n"); + V_VT(&v2) = 0xff; /* incorrect variant type */ + hres = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_INT); + ok(hres == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx returns %08x\n", hres); + ok(V_VT(&v2) == 0xff, "VariantChangeTypeEx changed dst variant\n"); + hres = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_BSTR); + ok(hres == DISP_E_BADVARTYPE, "VariantChangeTypeEx returns %08x\n", hres); + ok(V_VT(&v2) == 0xff, "VariantChangeTypeEx changed dst variant\n"); SysFreeString(bstr); } diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index 053903ef461..c3bd225d41e 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -1042,7 +1042,7 @@ HRESULT WINAPI VariantChangeTypeEx(VARIANTARG* pvargDest, VARIANTARG* pvargSrc, if (SUCCEEDED(res)) { V_VT(&vTmp) = vt; - VariantCopy(pvargDest, &vTmp); + res = VariantCopy(pvargDest, &vTmp); } VariantClear(&vTmp); VariantClear(&vSrcDeref);