msi: Fix some leaks (coverity) (try 2)
Frédéric Delanoy
frederic.delanoy at gmail.com
Thu Nov 8 07:44:52 CST 2012
CIDs 713568 713577-713578 713582 716414-716420
---
dlls/msi/action.c | 21 +++++++++++++--------
dlls/msi/files.c | 2 ++
dlls/msi/package.c | 3 +++
3 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index f9ab550..8d4876a 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -5752,6 +5752,7 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
LPWSTR depends = NULL, pass = NULL, args = NULL, image_path = NULL;
DWORD serv_type, start_type, err_control;
SERVICE_DESCRIPTIONW sd = {NULL};
+ UINT ret = ERROR_SUCCESS;
comp = MSI_RecordGetString( rec, 12 );
component = msi_get_loaded_component( package, comp );
@@ -5809,7 +5810,10 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
{
int len = strlenW(file->TargetPath) + strlenW(args) + 2;
if (!(image_path = msi_alloc(len * sizeof(WCHAR))))
- return ERROR_OUTOFMEMORY;
+ {
+ ret = ERROR_OUTOFMEMORY;
+ goto done;
+ }
strcpyW(image_path, file->TargetPath);
strcatW(image_path, szSpace);
@@ -5843,7 +5847,7 @@ done:
msi_free(depends);
msi_free(args);
- return ERROR_SUCCESS;
+ return ret;
}
static UINT ACTION_InstallServices( MSIPACKAGE *package )
@@ -6043,6 +6047,7 @@ static BOOL stop_service_dependents(SC_HANDLE scm, SC_HANDLE service)
ENUM_SERVICE_STATUSW *dependencies;
SERVICE_STATUS ss;
SC_HANDLE depserv;
+ BOOL ret = FALSE;
if (EnumDependentServicesW(service, SERVICE_ACTIVE, NULL,
0, &needed, &count))
@@ -6057,24 +6062,24 @@ static BOOL stop_service_dependents(SC_HANDLE scm, SC_HANDLE service)
if (!EnumDependentServicesW(service, SERVICE_ACTIVE, dependencies,
needed, &needed, &count))
- goto error;
+ goto done;
for (i = 0; i < count; i++)
{
depserv = OpenServiceW(scm, dependencies[i].lpServiceName,
SERVICE_STOP | SERVICE_QUERY_STATUS);
if (!depserv)
- goto error;
+ goto done;
if (!ControlService(depserv, SERVICE_CONTROL_STOP, &ss))
- goto error;
+ goto done;
}
- return TRUE;
+ ret = TRUE;
-error:
+done:
msi_free(dependencies);
- return FALSE;
+ return ret;
}
static UINT stop_service( LPCWSTR name )
diff --git a/dlls/msi/files.c b/dlls/msi/files.c
index 11913ef..98d7513 100644
--- a/dlls/msi/files.c
+++ b/dlls/msi/files.c
@@ -336,6 +336,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
if (rc != ERROR_SUCCESS)
{
ERR("Unable to load media info for %s (%u)\n", debugstr_w(file->File), rc);
+ msi_free(mi);
return ERROR_FUNCTION_FAILED;
}
if (!file->Component->Enabled) continue;
@@ -513,6 +514,7 @@ UINT ACTION_PatchFiles( MSIPACKAGE *package )
if (rc != ERROR_SUCCESS)
{
ERR("Unable to load media info for %s (%u)\n", debugstr_w(file->File), rc);
+ msi_free(mi);
return ERROR_FUNCTION_FAILED;
}
comp->Action = msi_get_component_action( package, comp );
diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 015af00..b7b1fca 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -1581,7 +1581,10 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
TRACE("opening package %s\n", debugstr_w( localfile ));
r = MSI_OpenDatabaseW( localfile, MSIDBOPEN_TRANSACT, &db );
if (r != ERROR_SUCCESS)
+ {
+ msi_free(base_url);
return r;
+ }
}
package = MSI_CreatePackage( db, base_url );
msi_free( base_url );
--
1.8.0
More information about the wine-patches
mailing list