mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-12 13:17:58 +03:00
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:
parent
b79aaf91b8
commit
680c92ae7e
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user