[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