diff --git a/xinclude.c b/xinclude.c index 9f2faa44..d0ca15e3 100644 --- a/xinclude.c +++ b/xinclude.c @@ -1960,7 +1960,11 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, xmlXIncludeRefPtr ref) { end = list; list = list->next; - xmlAddPrevSibling(cur, end); + if (xmlAddPrevSibling(cur, end) == NULL) { + xmlUnlinkNode(end); + xmlFreeNode(end); + goto err_memory; + } } /* * FIXME: xmlUnlinkNode doesn't coalesce text nodes. @@ -1984,13 +1988,13 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, xmlXIncludeRefPtr ref) { xmlFreeNode(child); } end = xmlNewDocNode(cur->doc, cur->ns, cur->name, NULL); - if (end == NULL) { - xmlXIncludeErrMemory(ctxt); - xmlFreeNodeList(list); - return(-1); - } + if (end == NULL) + goto err_memory; end->type = XML_XINCLUDE_END; - xmlAddNextSibling(cur, end); + if (xmlAddNextSibling(cur, end) == NULL) { + xmlFreeNode(end); + goto err_memory; + } /* * Add the list of nodes @@ -1999,12 +2003,21 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, xmlXIncludeRefPtr ref) { cur = list; list = list->next; - xmlAddPrevSibling(end, cur); + if (xmlAddPrevSibling(end, cur) == NULL) { + xmlUnlinkNode(cur); + xmlFreeNode(cur); + goto err_memory; + } } } return(0); + +err_memory: + xmlXIncludeErrMemory(ctxt); + xmlFreeNodeList(list); + return(-1); } /**