From 3abd27c624cfbdcb480d4a7ebc711e6c0b9339ae Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Fri, 5 May 2006 15:49:57 +0100 Subject: [PATCH] oleaut32: Fix VARIANT_UserFree. --- dlls/oleaut32/usrmarshal.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c index 3177e0bc07c..a26b93da290 100644 --- a/dlls/oleaut32/usrmarshal.c +++ b/dlls/oleaut32/usrmarshal.c @@ -646,23 +646,26 @@ void WINAPI VARIANT_UserFree(unsigned long *pFlags, VARIANT *pvar) VariantClear(pvar); if (!ref) return; - switch (vt) { - case VT_BSTR | VT_BYREF: - BSTR_UserFree(pFlags, ref); - break; - case VT_VARIANT | VT_BYREF: - VARIANT_UserFree(pFlags, ref); - break; - case VT_RECORD | VT_BYREF: - FIXME("handle BRECORD by ref\n"); - break; - case VT_UNKNOWN: - case VT_DISPATCH: - IUnknown_Release(V_UNKNOWN(pvar)); - break; - default: - FIXME("handle unknown complex type\n"); - break; + if(vt & VT_ARRAY) + LPSAFEARRAY_UserFree(pFlags, V_ARRAYREF(pvar)); + else + { + switch (vt) + { + case VT_BSTR | VT_BYREF: + BSTR_UserFree(pFlags, V_BSTRREF(pvar)); + break; + case VT_VARIANT | VT_BYREF: + VARIANT_UserFree(pFlags, V_VARIANTREF(pvar)); + break; + case VT_RECORD | VT_BYREF: + FIXME("handle BRECORD by ref\n"); + break; + case VT_UNKNOWN | VT_BYREF: + case VT_DISPATCH | VT_BYREF: + IUnknown_Release(*V_UNKNOWNREF(pvar)); + break; + } } CoTaskMemFree(ref); -- 2.11.4.GIT