Piotr Caban : oleaut32: Handle VariantCopy errors in VariantChangeTypeEx.

Alexandre Julliard julliard at winehq.org
Thu May 1 14:40:00 CDT 2014


Module: wine
Branch: master
Commit: d1469144e9a5e300223703cb69d32e6e6c25b28b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d1469144e9a5e300223703cb69d32e6e6c25b28b

Author: Piotr Caban <piotr at 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);




More information about the wine-cvs mailing list