Module: wine Branch: master Commit: 3a424aca589e1130a29632e859263ec1b81b168d URL: http://source.winehq.org/git/wine.git/?a=commit;h=3a424aca589e1130a29632e859...
Author: Misha Koshelev mk144210@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;