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