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