mirror of
https://github.com/GNOME/libxml2.git
synced 2025-05-09 21:31:17 +08:00
xinclude: Fix memory leak with namespace nodes
Abort instead of setting nodeset elements to NULL. Fixes leak of namespace nodes and avoids extraneous error messages.
This commit is contained in:
parent
eb0c98ebd0
commit
def3674c58
14
xinclude.c
14
xinclude.c
@ -1285,7 +1285,7 @@ loaded:
|
|||||||
set = xptr->nodesetval;
|
set = xptr->nodesetval;
|
||||||
if (set != NULL) {
|
if (set != NULL) {
|
||||||
for (i = 0;i < set->nodeNr;i++) {
|
for (i = 0;i < set->nodeNr;i++) {
|
||||||
if (set->nodeTab[i] == NULL)
|
if (set->nodeTab[i] == NULL) /* shouldn't happen */
|
||||||
continue;
|
continue;
|
||||||
switch (set->nodeTab[i]->type) {
|
switch (set->nodeTab[i]->type) {
|
||||||
case XML_ELEMENT_NODE:
|
case XML_ELEMENT_NODE:
|
||||||
@ -1304,15 +1304,13 @@ loaded:
|
|||||||
XML_XINCLUDE_XPTR_RESULT,
|
XML_XINCLUDE_XPTR_RESULT,
|
||||||
"XPointer selects an attribute: #%s\n",
|
"XPointer selects an attribute: #%s\n",
|
||||||
fragment);
|
fragment);
|
||||||
set->nodeTab[i] = NULL;
|
goto xptr_error;
|
||||||
continue;
|
|
||||||
case XML_NAMESPACE_DECL:
|
case XML_NAMESPACE_DECL:
|
||||||
xmlXIncludeErr(ctxt, ref->elem,
|
xmlXIncludeErr(ctxt, ref->elem,
|
||||||
XML_XINCLUDE_XPTR_RESULT,
|
XML_XINCLUDE_XPTR_RESULT,
|
||||||
"XPointer selects a namespace: #%s\n",
|
"XPointer selects a namespace: #%s\n",
|
||||||
fragment);
|
fragment);
|
||||||
set->nodeTab[i] = NULL;
|
goto xptr_error;
|
||||||
continue;
|
|
||||||
case XML_DOCUMENT_TYPE_NODE:
|
case XML_DOCUMENT_TYPE_NODE:
|
||||||
case XML_DOCUMENT_FRAG_NODE:
|
case XML_DOCUMENT_FRAG_NODE:
|
||||||
case XML_NOTATION_NODE:
|
case XML_NOTATION_NODE:
|
||||||
@ -1322,17 +1320,17 @@ loaded:
|
|||||||
case XML_ENTITY_DECL:
|
case XML_ENTITY_DECL:
|
||||||
case XML_XINCLUDE_START:
|
case XML_XINCLUDE_START:
|
||||||
case XML_XINCLUDE_END:
|
case XML_XINCLUDE_END:
|
||||||
|
/* shouldn't happen */
|
||||||
xmlXIncludeErr(ctxt, ref->elem,
|
xmlXIncludeErr(ctxt, ref->elem,
|
||||||
XML_XINCLUDE_XPTR_RESULT,
|
XML_XINCLUDE_XPTR_RESULT,
|
||||||
"XPointer selects unexpected nodes: #%s\n",
|
"XPointer selects unexpected nodes: #%s\n",
|
||||||
fragment);
|
fragment);
|
||||||
set->nodeTab[i] = NULL;
|
goto xptr_error;
|
||||||
set->nodeTab[i] = NULL;
|
|
||||||
continue; /* for */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ref->inc = xmlXIncludeCopyXPointer(ctxt, xptr, ref->base);
|
ref->inc = xmlXIncludeCopyXPointer(ctxt, xptr, ref->base);
|
||||||
|
xptr_error:
|
||||||
xmlXPathFreeObject(xptr);
|
xmlXPathFreeObject(xptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user