Module: wine Branch: refs/heads/master Commit: 3abd27c624cfbdcb480d4a7ebc711e6c0b9339ae URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=3abd27c624cfbdcb480d4a7e...
Author: Huw Davies huw@codeweavers.com Date: Fri May 5 15:49:57 2006 +0100
oleaut32: Fix VARIANT_UserFree.
---
dlls/oleaut32/usrmarshal.c | 37 ++++++++++++++++++++----------------- 1 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c index 3177e0b..a26b93d 100644 --- a/dlls/oleaut32/usrmarshal.c +++ b/dlls/oleaut32/usrmarshal.c @@ -646,23 +646,26 @@ void WINAPI VARIANT_UserFree(unsigned lo 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);