[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH] ESX: Fix memory leak in list handling functions.



If an error occurs between the allocation of an item and appending it
to the list, the item leaks. Free such orphaned items in error cases.

* src/esx/esx_vi.c: free orphaned items in error cases
---
 src/esx/esx_vi.c |   24 ++++++++----------------
 1 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
index bcf110f..04860e2 100644
--- a/src/esx/esx_vi.c
+++ b/src/esx/esx_vi.c
@@ -959,28 +959,22 @@ esxVI_List_CastFromAnyType(virConnectPtr conn, esxVI_AnyType *anyType,
 
         esxVI_AnyType_Free(&childAnyType);
 
-        if (esxVI_AnyType_Deserialize(conn, childNode, &childAnyType) < 0) {
+        if (esxVI_AnyType_Deserialize(conn, childNode, &childAnyType) < 0 ||
+            castFromAnyTypeFunc(conn, childAnyType, &item) < 0 ||
+            esxVI_List_Append(conn, list, item) < 0) {
             goto failure;
         }
 
         item = NULL;
-
-        if (castFromAnyTypeFunc(conn, childAnyType, &item) < 0) {
-            goto failure;
-        }
-
-        if (esxVI_List_Append(conn, list, item) < 0) {
-            goto failure;
-        }
     }
 
-
   cleanup:
     esxVI_AnyType_Free(&childAnyType);
 
     return result;
 
   failure:
+    freeFunc(&item);
     freeFunc(list);
 
     result = -1;
@@ -1039,20 +1033,18 @@ esxVI_List_Deserialize(virConnectPtr conn, xmlNodePtr node, esxVI_List **list,
             goto failure;
         }
 
-        item = NULL;
-
-        if (deserializeFunc(conn, node, &item) < 0) {
+        if (deserializeFunc(conn, node, &item) < 0 ||
+            esxVI_List_Append(conn, list, item) < 0) {
             goto failure;
         }
 
-        if (esxVI_List_Append(conn, list, item) < 0) {
-            goto failure;
-        }
+        item = NULL;
     }
 
     return 0;
 
   failure:
+    freeFunc(&item);
     freeFunc(list);
 
     return -1;
-- 
1.6.0.4


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]