提交 680c92ae 编写于 作者: M Matthias Bolte

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
上级 b79aaf91
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册