153aa9179Sopenharmony_ciFrom 6f9604f0e3e52e96881ab3b662f35fbe04cd49ac Mon Sep 17 00:00:00 2001 253aa9179Sopenharmony_ciFrom: Nick Wellnhofer <wellnhofer@aevum.de> 353aa9179Sopenharmony_ciDate: Sun, 26 Feb 2023 16:09:50 +0100 453aa9179Sopenharmony_ciSubject: [PATCH] malloc-fail: Fix memory leak in xmlXPathCacheNewNodeSet 553aa9179Sopenharmony_ci 653aa9179Sopenharmony_ciFound with libFuzzer, see #344. 753aa9179Sopenharmony_ci 853aa9179Sopenharmony_ciReference:https://github.com/GNOME/libxml2/commit/6f9604f0e3e52e96881ab3b662f35fbe04cd49ac 953aa9179Sopenharmony_ciConflict:NA 1053aa9179Sopenharmony_ci--- 1153aa9179Sopenharmony_ci xpath.c | 15 +++++++++------ 1253aa9179Sopenharmony_ci 1 file changed, 9 insertions(+), 6 deletions(-) 1353aa9179Sopenharmony_ci 1453aa9179Sopenharmony_cidiff --git a/xpath.c b/xpath.c 1553aa9179Sopenharmony_ciindex 84b139d..1f358e3 100644 1653aa9179Sopenharmony_ci--- a/xpath.c 1753aa9179Sopenharmony_ci+++ b/xpath.c 1853aa9179Sopenharmony_ci@@ -2448,21 +2448,24 @@ xmlXPathCacheNewNodeSet(xmlXPathContextPtr ctxt, xmlNodePtr val) 1953aa9179Sopenharmony_ci (cache->miscObjs->number != 0)) 2053aa9179Sopenharmony_ci { 2153aa9179Sopenharmony_ci xmlXPathObjectPtr ret; 2253aa9179Sopenharmony_ci+ xmlNodeSetPtr set; 2353aa9179Sopenharmony_ci /* 2453aa9179Sopenharmony_ci * Fallback to misc-cache. 2553aa9179Sopenharmony_ci */ 2653aa9179Sopenharmony_ci 2753aa9179Sopenharmony_ci+ set = xmlXPathNodeSetCreate(val); 2853aa9179Sopenharmony_ci+ if (set == NULL) { 2953aa9179Sopenharmony_ci+ ctxt->lastError.domain = XML_FROM_XPATH; 3053aa9179Sopenharmony_ci+ ctxt->lastError.code = XML_ERR_NO_MEMORY; 3153aa9179Sopenharmony_ci+ return(NULL); 3253aa9179Sopenharmony_ci+ } 3353aa9179Sopenharmony_ci+ 3453aa9179Sopenharmony_ci ret = (xmlXPathObjectPtr) 3553aa9179Sopenharmony_ci cache->miscObjs->items[--cache->miscObjs->number]; 3653aa9179Sopenharmony_ci 3753aa9179Sopenharmony_ci ret->type = XPATH_NODESET; 3853aa9179Sopenharmony_ci ret->boolval = 0; 3953aa9179Sopenharmony_ci- ret->nodesetval = xmlXPathNodeSetCreate(val); 4053aa9179Sopenharmony_ci- if (ret->nodesetval == NULL) { 4153aa9179Sopenharmony_ci- ctxt->lastError.domain = XML_FROM_XPATH; 4253aa9179Sopenharmony_ci- ctxt->lastError.code = XML_ERR_NO_MEMORY; 4353aa9179Sopenharmony_ci- return(NULL); 4453aa9179Sopenharmony_ci- } 4553aa9179Sopenharmony_ci+ ret->nodesetval = set; 4653aa9179Sopenharmony_ci #ifdef XP_DEBUG_OBJ_USAGE 4753aa9179Sopenharmony_ci xmlXPathDebugObjUsageRequested(ctxt, XPATH_NODESET); 4853aa9179Sopenharmony_ci #endif 4953aa9179Sopenharmony_ci-- 5053aa9179Sopenharmony_ci2.27.0 5153aa9179Sopenharmony_ci 52