Module: wine Branch: master Commit: 22a277cc2ea99285c4be50633edb3db1a526dc1c URL: http://source.winehq.org/git/wine.git/?a=commit;h=22a277cc2ea99285c4be50633e...
Author: Hans Leidekker hans@codeweavers.com Date: Thu May 28 15:04:17 2009 +0200
msi: Fix some memory leaks.
---
dlls/msi/alter.c | 5 ++++- dlls/msi/drop.c | 5 ++++- dlls/msi/join.c | 5 ++++- dlls/msi/storages.c | 4 +++- dlls/msi/streams.c | 3 +++ dlls/msi/update.c | 3 +++ 6 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/alter.c b/dlls/msi/alter.c index c31aae1..0f750d0 100644 --- a/dlls/msi/alter.c +++ b/dlls/msi/alter.c @@ -257,8 +257,11 @@ UINT ALTER_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR name, column_inf return ERROR_FUNCTION_FAILED;
r = TABLE_CreateView( db, name, &av->table ); - if (r != ERROR_SUCCESS || !av->table) + if (r != ERROR_SUCCESS) + { + msi_free( av ); return r; + }
if (colinfo) colinfo->table = name; diff --git a/dlls/msi/drop.c b/dlls/msi/drop.c index 20ab441..a385633 100644 --- a/dlls/msi/drop.c +++ b/dlls/msi/drop.c @@ -113,8 +113,11 @@ UINT DROP_CreateView(MSIDATABASE *db, MSIVIEW **view, LPCWSTR name) return ERROR_FUNCTION_FAILED;
r = TABLE_CreateView(db, name, &dv->table); - if (r != ERROR_SUCCESS || !dv->table) + if (r != ERROR_SUCCESS) + { + msi_free( dv ); return r; + }
dv->view.ops = &drop_ops; dv->db = db; diff --git a/dlls/msi/join.c b/dlls/msi/join.c index 572e84b..35db2fe 100644 --- a/dlls/msi/join.c +++ b/dlls/msi/join.c @@ -338,7 +338,10 @@ UINT JOIN_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR tables )
table = msi_alloc(sizeof(JOINTABLE)); if (!table) - return ERROR_OUTOFMEMORY; + { + r = ERROR_OUTOFMEMORY; + goto end; + }
r = TABLE_CreateView( db, tables, &table->view ); if( r != ERROR_SUCCESS ) diff --git a/dlls/msi/storages.c b/dlls/msi/storages.c index 3a54822..16b323c 100644 --- a/dlls/msi/storages.c +++ b/dlls/msi/storages.c @@ -559,8 +559,10 @@ UINT STORAGES_CreateView(MSIDATABASE *db, MSIVIEW **view)
rows = add_storages_to_table(sv); if (rows < 0) + { + msi_free( sv ); return ERROR_FUNCTION_FAILED; - + } sv->num_rows = rows;
*view = (MSIVIEW *)sv; diff --git a/dlls/msi/streams.c b/dlls/msi/streams.c index 065f8ed..2d869cc 100644 --- a/dlls/msi/streams.c +++ b/dlls/msi/streams.c @@ -523,7 +523,10 @@ UINT STREAMS_CreateView(MSIDATABASE *db, MSIVIEW **view) sv->db = db; rows = add_streams_to_table(sv); if (rows < 0) + { + msi_free( sv ); return ERROR_FUNCTION_FAILED; + } sv->num_rows = rows;
*view = (MSIVIEW *)sv; diff --git a/dlls/msi/update.c b/dlls/msi/update.c index 31e5e25..56d2391 100644 --- a/dlls/msi/update.c +++ b/dlls/msi/update.c @@ -261,7 +261,10 @@ UINT UPDATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR table,
uv = msi_alloc_zero( sizeof *uv ); if( !uv ) + { + wv->ops->delete( wv ); return ERROR_FUNCTION_FAILED; + }
/* fill the structure */ uv->view.ops = &update_ops;