oleaut32: Fix default parameter variant leak (Valgrind).
authorNikolay Sivov <nsivov@codeweavers.com>
Fri, 28 Jan 2011 23:12:56 +0000 (02:12 +0300)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 31 Jan 2011 11:28:25 +0000 (12:28 +0100)
dlls/oleaut32/typelib2.c

index 8260ef28815f715b03b9d1d23c2d7a72a7a110bd..f87ed9f9619f166277216836c2f1edb1c8ee4c42 100644 (file)
@@ -3313,6 +3313,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetFuncDesc(
                     }
 
                     (*ppFuncDesc)->lprgelemdescParam[i].u.paramdesc.pparamdescex->cBytes = sizeof(PARAMDESCEX);
+                    VariantInit(&(*ppFuncDesc)->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue);
                     hres = ctl2_decode_variant(This->typelib, typedata[hdr_len + i],
                             &(*ppFuncDesc)->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue);
                     if (FAILED(hres)) {
@@ -3749,7 +3750,11 @@ static void WINAPI ITypeInfo2_fnReleaseFuncDesc(
             if (pFuncDesc->lprgelemdescParam[i].tdesc.vt != VT_USERDEFINED)
                 release_typedesc(pFuncDesc->lprgelemdescParam[i].tdesc.u.lptdesc);
 
-            heap_free(pFuncDesc->lprgelemdescParam[i].u.paramdesc.pparamdescex);
+            if (pFuncDesc->lprgelemdescParam[i].u.paramdesc.pparamdescex)
+            {
+                VariantClear(&pFuncDesc->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue);
+                heap_free(pFuncDesc->lprgelemdescParam[i].u.paramdesc.pparamdescex);
+            }
         }
         heap_free(pFuncDesc->lprgelemdescParam);
     }