[4/4] msi: Fix some memory leaks.
Hans Leidekker
hans at codeweavers.com
Thu May 28 08:04:17 CDT 2009
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;
More information about the wine-patches
mailing list