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
This commit is contained in:
Matthias Bolte 2009-10-22 09:47:51 +02:00
parent b79aaf91b8
commit 680c92ae7e

View File

@ -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;
}
if (deserializeFunc(conn, node, &item) < 0 ||
esxVI_List_Append(conn, list, item) < 0) {
goto failure;
}
item = NULL;
if (deserializeFunc(conn, node, &item) < 0) {
goto failure;
}
if (esxVI_List_Append(conn, list, item) < 0) {
goto failure;
}
}
return 0;
failure:
freeFunc(&item);
freeFunc(list);
return -1;