153aa9179Sopenharmony_ciFrom f442a3290626a522b6e71c902a971859b15566f3 Mon Sep 17 00:00:00 2001 253aa9179Sopenharmony_ciFrom: Nick Wellnhofer <wellnhofer@aevum.de> 353aa9179Sopenharmony_ciDate: Sun, 30 Oct 2022 12:32:14 +0100 453aa9179Sopenharmony_ciSubject: [PATCH 02/28] xinclude: Fix more memory leaks in xmlXIncludeLoadDoc 553aa9179Sopenharmony_ci 653aa9179Sopenharmony_ciReference: https://github.com/GNOME/libxml2/commit/f14529baf5315b3d77877fd1617b0e1f3df564d0 753aa9179Sopenharmony_ciConflict: xinclude.c:<xmlXIncludeLoadDoc> 853aa9179Sopenharmony_ci--- 953aa9179Sopenharmony_ci xinclude.c | 37 ++++++++++++++----------------------- 1053aa9179Sopenharmony_ci 1 file changed, 14 insertions(+), 23 deletions(-) 1153aa9179Sopenharmony_ci 1253aa9179Sopenharmony_cidiff --git a/xinclude.c b/xinclude.c 1353aa9179Sopenharmony_ciindex 6ee58cb..cd1e1b1 100644 1453aa9179Sopenharmony_ci--- a/xinclude.c 1553aa9179Sopenharmony_ci+++ b/xinclude.c 1653aa9179Sopenharmony_ci@@ -1417,9 +1417,10 @@ static int 1753aa9179Sopenharmony_ci xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { 1853aa9179Sopenharmony_ci xmlDocPtr doc; 1953aa9179Sopenharmony_ci xmlURIPtr uri; 2053aa9179Sopenharmony_ci- xmlChar *URL; 2153aa9179Sopenharmony_ci+ xmlChar *URL = NULL; 2253aa9179Sopenharmony_ci xmlChar *fragment = NULL; 2353aa9179Sopenharmony_ci int i = 0; 2453aa9179Sopenharmony_ci+ int ret = -1; 2553aa9179Sopenharmony_ci #ifdef LIBXML_XPTR_ENABLED 2653aa9179Sopenharmony_ci int saveFlags; 2753aa9179Sopenharmony_ci #endif 2853aa9179Sopenharmony_ci@@ -1435,7 +1436,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { 2953aa9179Sopenharmony_ci xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 3053aa9179Sopenharmony_ci XML_XINCLUDE_HREF_URI, 3153aa9179Sopenharmony_ci "invalid value URI %s\n", url); 3253aa9179Sopenharmony_ci- return(-1); 3353aa9179Sopenharmony_ci+ goto error; 3453aa9179Sopenharmony_ci } 3553aa9179Sopenharmony_ci if (uri->fragment != NULL) { 3653aa9179Sopenharmony_ci fragment = (xmlChar *) uri->fragment; 3753aa9179Sopenharmony_ci@@ -1457,9 +1458,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { 3853aa9179Sopenharmony_ci xmlXIncludeErr(ctxt, NULL, 3953aa9179Sopenharmony_ci XML_XINCLUDE_HREF_URI, 4053aa9179Sopenharmony_ci "invalid value URI %s\n", url); 4153aa9179Sopenharmony_ci- if (fragment != NULL) 4253aa9179Sopenharmony_ci- xmlFree(fragment); 4353aa9179Sopenharmony_ci- return(-1); 4453aa9179Sopenharmony_ci+ goto error; 4553aa9179Sopenharmony_ci } 4653aa9179Sopenharmony_ci 4753aa9179Sopenharmony_ci /* 4853aa9179Sopenharmony_ci@@ -1509,10 +1508,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { 4953aa9179Sopenharmony_ci ctxt->parseFlags = saveFlags; 5053aa9179Sopenharmony_ci #endif 5153aa9179Sopenharmony_ci if (doc == NULL) { 5253aa9179Sopenharmony_ci- xmlFree(URL); 5353aa9179Sopenharmony_ci- if (fragment != NULL) 5453aa9179Sopenharmony_ci- xmlFree(fragment); 5553aa9179Sopenharmony_ci- return(-1); 5653aa9179Sopenharmony_ci+ goto error; 5753aa9179Sopenharmony_ci } 5853aa9179Sopenharmony_ci ctxt->incTab[nr]->doc = doc; 5953aa9179Sopenharmony_ci /* 6053aa9179Sopenharmony_ci@@ -1578,9 +1574,7 @@ loaded: 6153aa9179Sopenharmony_ci xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 6253aa9179Sopenharmony_ci XML_XINCLUDE_XPTR_FAILED, 6353aa9179Sopenharmony_ci "could not create XPointer context\n", NULL); 6453aa9179Sopenharmony_ci- xmlFree(URL); 6553aa9179Sopenharmony_ci- xmlFree(fragment); 6653aa9179Sopenharmony_ci- return(-1); 6753aa9179Sopenharmony_ci+ goto error; 6853aa9179Sopenharmony_ci } 6953aa9179Sopenharmony_ci xptr = xmlXPtrEval(fragment, xptrctxt); 7053aa9179Sopenharmony_ci if (xptr == NULL) { 7153aa9179Sopenharmony_ci@@ -1589,9 +1583,7 @@ loaded: 7253aa9179Sopenharmony_ci "XPointer evaluation failed: #%s\n", 7353aa9179Sopenharmony_ci fragment); 7453aa9179Sopenharmony_ci xmlXPathFreeContext(xptrctxt); 7553aa9179Sopenharmony_ci- xmlFree(URL); 7653aa9179Sopenharmony_ci- xmlFree(fragment); 7753aa9179Sopenharmony_ci- return(-1); 7853aa9179Sopenharmony_ci+ goto error; 7953aa9179Sopenharmony_ci } 8053aa9179Sopenharmony_ci switch (xptr->type) { 8153aa9179Sopenharmony_ci case XPATH_UNDEFINED: 8253aa9179Sopenharmony_ci@@ -1607,17 +1599,13 @@ loaded: 8353aa9179Sopenharmony_ci fragment); 8453aa9179Sopenharmony_ci xmlXPathFreeObject(xptr); 8553aa9179Sopenharmony_ci xmlXPathFreeContext(xptrctxt); 8653aa9179Sopenharmony_ci- xmlFree(URL); 8753aa9179Sopenharmony_ci- xmlFree(fragment); 8853aa9179Sopenharmony_ci- return(-1); 8953aa9179Sopenharmony_ci+ goto error; 9053aa9179Sopenharmony_ci case XPATH_NODESET: 9153aa9179Sopenharmony_ci if ((xptr->nodesetval == NULL) || 9253aa9179Sopenharmony_ci (xptr->nodesetval->nodeNr <= 0)) { 9353aa9179Sopenharmony_ci xmlXPathFreeObject(xptr); 9453aa9179Sopenharmony_ci xmlXPathFreeContext(xptrctxt); 9553aa9179Sopenharmony_ci- xmlFree(URL); 9653aa9179Sopenharmony_ci- xmlFree(fragment); 9753aa9179Sopenharmony_ci- return(-1); 9853aa9179Sopenharmony_ci+ goto error; 9953aa9179Sopenharmony_ci } 10053aa9179Sopenharmony_ci 10153aa9179Sopenharmony_ci case XPATH_RANGE: 10253aa9179Sopenharmony_ci@@ -1681,7 +1669,6 @@ loaded: 10353aa9179Sopenharmony_ci xmlXIncludeCopyXPointer(ctxt, ctxt->doc, doc, xptr); 10453aa9179Sopenharmony_ci xmlXPathFreeObject(xptr); 10553aa9179Sopenharmony_ci xmlXPathFreeContext(xptrctxt); 10653aa9179Sopenharmony_ci- xmlFree(fragment); 10753aa9179Sopenharmony_ci } 10853aa9179Sopenharmony_ci #endif 10953aa9179Sopenharmony_ci 11053aa9179Sopenharmony_ci@@ -1777,8 +1764,12 @@ loaded: 11153aa9179Sopenharmony_ci xmlFreeDoc(ctxt->incTab[nr]->doc); 11253aa9179Sopenharmony_ci ctxt->incTab[nr]->doc = NULL; 11353aa9179Sopenharmony_ci } 11453aa9179Sopenharmony_ci+ ret = 0; 11553aa9179Sopenharmony_ci+ 11653aa9179Sopenharmony_ci+error: 11753aa9179Sopenharmony_ci xmlFree(URL); 11853aa9179Sopenharmony_ci- return(0); 11953aa9179Sopenharmony_ci+ xmlFree(fragment); 12053aa9179Sopenharmony_ci+ return(ret); 12153aa9179Sopenharmony_ci } 12253aa9179Sopenharmony_ci 12353aa9179Sopenharmony_ci /** 12453aa9179Sopenharmony_ci-- 12553aa9179Sopenharmony_ci2.27.0 12653aa9179Sopenharmony_ci 127