Commit 3a424aca authored by Misha Koshelev's avatar Misha Koshelev Committed by Alexandre Julliard

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

parent ab2669a7
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment