Module: wine Branch: master Commit: d1469144e9a5e300223703cb69d32e6e6c25b28b URL: http://source.winehq.org/git/wine.git/?a=commit;h=d1469144e9a5e300223703cb69...
Author: Piotr Caban piotr@codeweavers.com Date: Thu May 1 12:14:27 2014 +0200
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 ea5065f..b873d82 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 053903e..c3bd225 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);