fixed problem with "recursive" include (fallback contains another include
* xinclude.c: fixed problem with "recursive" include (fallback
contains another include - Bug 129969)
diff --git a/ChangeLog b/ChangeLog
index 59cb11c..48229e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Jan 2 22:58:29 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: fixed problem with "recursive" include (fallback
+ contains another include - Bug 129969)
+
Fri Jan 2 11:40:06 CET 2004 Daniel Veillard <daniel@veillard.com>
* SAX2.c: found and fixed a bug misallocating some non
diff --git a/xinclude.c b/xinclude.c
index 0b34c3e..2697cfa 100644
--- a/xinclude.c
+++ b/xinclude.c
@@ -1760,11 +1760,26 @@
*/
static int
xmlXIncludeLoadFallback(xmlXIncludeCtxtPtr ctxt, xmlNodePtr fallback, int nr) {
+ xmlXIncludeCtxtPtr newctxt;
+ int ret = 0;
+
if ((fallback == NULL) || (ctxt == NULL))
return(-1);
+ /*
+ * It's possible that the fallback also has 'includes'
+ * (Bug 129969), so we re-process the fallback just in case
+ */
+ newctxt = xmlXIncludeNewContext(ctxt->doc);
+ if (newctxt == NULL)
+ return (-1);
+ xmlXIncludeSetFlags(newctxt, ctxt->parseFlags);
+ ret = xmlXIncludeDoProcess(newctxt, ctxt->doc, fallback->children);
+ if ((ret >=0) && (ctxt->nbErrors > 0))
+ ret = -1;
+ xmlXIncludeFreeContext(newctxt);
ctxt->incTab[nr]->inc = xmlCopyNodeList(fallback->children);
- return(0);
+ return(ret);
}
/************************************************************************