Misha Koshelev : msi: automation: Clear all VT_BSTR variants returned by DispGetParam.

Alexandre Julliard julliard at wine.codeweavers.com
Tue May 8 06:59:37 CDT 2007


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

Author: Misha Koshelev <mk144210 at bcm.edu>
Date:   Mon May  7 17:52:37 2007 -0500

msi: automation: Clear all VT_BSTR variants returned by DispGetParam.

---

 dlls/msi/automation.c |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c
index 025b4a9..d73c5e5 100644
--- a/dlls/msi/automation.c
+++ b/dlls/msi/automation.c
@@ -560,7 +560,9 @@ static HRESULT WINAPI RecordImpl_Invoke(
                 if (FAILED(hr)) return hr;
                 hr = DispGetParam(pDispParams, DISPID_PROPERTYPUT, VT_BSTR, &varg1, puArgErr);
                 if (FAILED(hr)) return hr;
-		if ((ret = MsiRecordSetStringW(This->msiHandle, V_I4(&varg0), V_BSTR(&varg1))) != ERROR_SUCCESS)
+                ret = MsiRecordSetStringW(This->msiHandle, V_I4(&varg0), V_BSTR(&varg1));
+                VariantClear(&varg1);
+		if (ret != ERROR_SUCCESS)
                 {
                     ERR("MsiRecordSetString returned %d\n", ret);
                     return DISP_E_EXCEPTION;
@@ -726,7 +728,9 @@ static HRESULT WINAPI DatabaseImpl_Invoke(
                 hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
                 if (FAILED(hr)) return hr;
                 V_VT(pVarResult) = VT_DISPATCH;
-                if ((ret = MsiDatabaseOpenViewW(This->msiHandle, V_BSTR(&varg0), &msiHandle)) == ERROR_SUCCESS)
+                ret = MsiDatabaseOpenViewW(This->msiHandle, V_BSTR(&varg0), &msiHandle);
+                VariantClear(&varg0);
+                if (ret == ERROR_SUCCESS)
                 {
                     if (SUCCEEDED(create_automation_object(msiHandle, NULL, (LPVOID*)&pDispatch, &DIID_View, ViewImpl_Invoke, NULL, 0)))
                     {
@@ -803,6 +807,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
                 }
                 if (ret != ERROR_SUCCESS)
 		    ERR("MsiGetProperty returned %d\n", ret);
+                VariantClear(&varg0);
 	    } else if (wFlags & DISPATCH_PROPERTYPUT) {
                 hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
                 if (FAILED(hr)) return hr;
@@ -811,7 +816,10 @@ static HRESULT WINAPI SessionImpl_Invoke(
                     VariantClear(&varg0);
                     return hr;
                 }
-		if ((ret = MsiSetPropertyW(This->msiHandle, V_BSTR(&varg0), V_BSTR(&varg1))) != ERROR_SUCCESS)
+                ret = MsiSetPropertyW(This->msiHandle, V_BSTR(&varg0), V_BSTR(&varg1));
+                VariantClear(&varg0);
+                VariantClear(&varg1);
+		if (ret != ERROR_SUCCESS)
                 {
                     ERR("MsiSetProperty returned %d\n", ret);
                     return DISP_E_EXCEPTION;
@@ -870,6 +878,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
                 hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
                 if (FAILED(hr)) return hr;
                 ret = MsiDoActionW(This->msiHandle, V_BSTR(&varg0));
+                VariantClear(&varg0);
                 V_VT(pVarResult) = VT_I4;
                 switch (ret)
                 {
@@ -926,6 +935,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
 		    ERR("MsiGetFeatureState returned %d\n", ret);
                     V_I4(pVarResult) = msiInstallStateUnknown;
 		}
+                VariantClear(&varg0);
 	    }
 	    break;
 
@@ -941,6 +951,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
 		    ERR("MsiGetFeatureState returned %d\n", ret);
                     V_I4(pVarResult) = msiInstallStateUnknown;
 		}
+                VariantClear(&varg0);
 	    } else if (wFlags & DISPATCH_PROPERTYPUT) {
                 hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
                 if (FAILED(hr)) return hr;
@@ -949,7 +960,9 @@ static HRESULT WINAPI SessionImpl_Invoke(
                     VariantClear(&varg0);
                     return hr;
                 }
-		if ((ret = MsiSetFeatureStateW(This->msiHandle, V_BSTR(&varg0), V_I4(&varg1))) != ERROR_SUCCESS)
+                ret = MsiSetFeatureStateW(This->msiHandle, V_BSTR(&varg0), V_I4(&varg1));
+                VariantClear(&varg0);
+		if (ret != ERROR_SUCCESS)
                 {
                     ERR("MsiSetFeatureState returned %d\n", ret);
                     return DISP_E_EXCEPTION;
@@ -992,9 +1005,15 @@ static HRESULT WINAPI InstallerImpl_Invoke(
                 hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
                 if (FAILED(hr)) return hr;
                 hr = DispGetParam(pDispParams, 1, VT_I4, &varg1, puArgErr);
-                if (FAILED(hr)) return hr;
+                if (FAILED(hr))
+                {
+                    VariantClear(&varg0);
+                    return hr;
+                }
                 V_VT(pVarResult) = VT_DISPATCH;
-		if ((ret = MsiOpenPackageExW(V_BSTR(&varg0), V_I4(&varg1), &msiHandle)) == ERROR_SUCCESS)
+                ret = MsiOpenPackageExW(V_BSTR(&varg0), V_I4(&varg1), &msiHandle);
+                VariantClear(&varg0);
+		if (ret == ERROR_SUCCESS)
                 {
                     if (SUCCEEDED(create_session(msiHandle, (IDispatch *)This, &pDispatch)))
                     {
@@ -1016,6 +1035,7 @@ static HRESULT WINAPI InstallerImpl_Invoke(
                 if (FAILED(hr)) return hr;
                 V_VT(pVarResult) = VT_I4;
                 V_I4(pVarResult) = MsiQueryProductStateW(V_BSTR(&varg0));
+                VariantClear(&varg0);
             }
             break;
 




More information about the wine-cvs mailing list