Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/msi/install.c | 7 ++++--- dlls/msi/package.c | 4 ++++ dlls/msi/streams.c | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/install.c b/dlls/msi/install.c index ce36bd3335..2cdebd2ad3 100644 --- a/dlls/msi/install.c +++ b/dlls/msi/install.c @@ -411,8 +411,7 @@ WCHAR *msi_resolve_source_folder( MSIPACKAGE *package, const WCHAR *name, MSIFOL UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz) { MSIPACKAGE *package; - const WCHAR *path; - WCHAR *folderW; + WCHAR *path, *folderW; UINT r;
TRACE("%s %p %p\n", debugstr_a(folder), buf, sz); @@ -459,6 +458,7 @@ UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DW else r = ERROR_DIRECTORY;
+ heap_free(path); heap_free(folderW); msiobj_release(&package->hdr); return r; @@ -470,7 +470,7 @@ UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DW UINT WINAPI MsiGetSourcePathW(MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf, DWORD *sz) { MSIPACKAGE *package; - const WCHAR *path; + WCHAR *path; UINT r;
TRACE("%s %p %p\n", debugstr_w(folder), buf, sz); @@ -510,6 +510,7 @@ UINT WINAPI MsiGetSourcePathW(MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf, else r = ERROR_DIRECTORY;
+ heap_free(path); msiobj_release(&package->hdr); return r; } diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 8e9ae6dd90..39a0a939b7 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -2125,6 +2125,7 @@ INT WINAPI MsiProcessMessage( MSIHANDLE hInstall, INSTALLMESSAGE eMessageType,
ret = MSI_ProcessMessage( package, eMessageType, record );
+ msiobj_release( &record->hdr ); msiobj_release( &package->hdr ); return ret; } @@ -2689,7 +2690,10 @@ UINT __cdecl s_remote_FormatRecord(MSIHANDLE hinst, struct wire_record *remote_r { *value = midl_user_allocate(++size * sizeof(WCHAR)); if (!*value) + { + MsiCloseHandle(rec); return ERROR_OUTOFMEMORY; + } r = MsiFormatRecordW(hinst, rec, *value, &size); }
diff --git a/dlls/msi/streams.c b/dlls/msi/streams.c index 7f9582cd4b..74ef899c1b 100644 --- a/dlls/msi/streams.c +++ b/dlls/msi/streams.c @@ -141,9 +141,9 @@ static UINT STREAMS_set_row(struct tagMSIVIEW *view, UINT row, MSIRECORD *rec, U
old = sv->db->streams[row].stream; hr = IStream_QueryInterface( new, &IID_IStream, (void **)&sv->db->streams[row].stream ); + IStream_Release( new ); if (FAILED( hr )) { - IStream_Release( new ); return ERROR_FUNCTION_FAILED; } if (old) IStream_Release( old );