oleaut32: Handle VariantCopy errors in VariantChangeTypeEx.

oldstable
Piotr Caban 2014-05-01 12:14:27 +02:00 committed by Alexandre Julliard
parent dcfd901c83
commit d1469144e9
2 changed files with 8 additions and 1 deletions

View File

@ -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);
}

View File

@ -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);