summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Wellnhofer <wellnhofer@aevum.de>2023-05-08 16:45:28 +0200
committerNick Wellnhofer <wellnhofer@aevum.de>2023-05-11 13:27:52 +0200
commit105ce73da0b8d5ce317c1cb96e6ea0c6cd52c230 (patch)
tree253523d5506b24743628e9c679a6f2ce7c23dd4e
parentbdb5667a5c064e2e38a97ea50f094f4b48e6a2b3 (diff)
downloadlibxml2-105ce73da0b8d5ce317c1cb96e6ea0c6cd52c230.tar.gz
xinclude: Fix false positives in inclusion loop detection
xmlXIncludeRecurseDoc can realloc the cache.
-rw-r--r--xinclude.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/xinclude.c b/xinclude.c
index 66a74695..09c1eef4 100644
--- a/xinclude.c
+++ b/xinclude.c
@@ -1265,6 +1265,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url,
xmlChar *fragment = NULL;
int i = 0;
int ret = -1;
+ int cacheNr;
#ifdef LIBXML_XPTR_ENABLED
int saveFlags;
#endif
@@ -1365,7 +1366,8 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url,
ctxt->urlMax = newSize;
ctxt->urlTab = tmp;
}
- cache = &ctxt->urlTab[ctxt->urlNr++];
+ cacheNr = ctxt->urlNr++;
+ cache = &ctxt->urlTab[cacheNr];
cache->doc = doc;
cache->url = xmlStrdup(URL);
cache->expanding = 0;
@@ -1403,6 +1405,8 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url,
*/
cache->expanding = 1;
xmlXIncludeRecurseDoc(ctxt, doc, URL);
+ /* urlTab might be reallocated. */
+ cache = &ctxt->urlTab[cacheNr];
cache->expanding = 0;
loaded: