mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-06-02 02:01:47 +03:00
enhanced to assure that if xpointer is called for a document, the
* xinclude.c: enhanced to assure that if xpointer is called for a document, the XML_PARSE_NOENT flag is set before parsing the included document so that entities will automatically get taken care of. * xpointer.c: corrected code so that, if an XML_ENTITY_REF node is encountered, it will log it and not crash (bug 135713)
This commit is contained in:
parent
a8feb5f401
commit
4d59e22a19
@ -1,3 +1,12 @@
|
|||||||
|
Mon Mar 8 22:33:14 HKT 2004 William Brack <wbrack@mmm.com.hk>
|
||||||
|
|
||||||
|
* xinclude.c: enhanced to assure that if xpointer is called
|
||||||
|
for a document, the XML_PARSE_NOENT flag is set before parsing
|
||||||
|
the included document so that entities will automatically get
|
||||||
|
taken care of.
|
||||||
|
* xpointer.c: corrected code so that, if an XML_ENTITY_REF node
|
||||||
|
is encountered, it will log it and not crash (bug 135713)
|
||||||
|
|
||||||
Sun Mar 7 19:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>
|
Sun Mar 7 19:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>
|
||||||
|
|
||||||
* xinclude.c: modified to make sub-includes inherit the
|
* xinclude.c: modified to make sub-includes inherit the
|
||||||
|
18
xinclude.c
18
xinclude.c
@ -1361,6 +1361,9 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
|
|||||||
xmlChar *URL;
|
xmlChar *URL;
|
||||||
xmlChar *fragment = NULL;
|
xmlChar *fragment = NULL;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
#ifdef LIBXML_XPTR_ENABLED
|
||||||
|
int saveFlags;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_XINCLUDE
|
#ifdef DEBUG_XINCLUDE
|
||||||
xmlGenericError(xmlGenericErrorContext, "Loading doc %s:%d\n", url, nr);
|
xmlGenericError(xmlGenericErrorContext, "Loading doc %s:%d\n", url, nr);
|
||||||
@ -1425,7 +1428,22 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
|
|||||||
#ifdef DEBUG_XINCLUDE
|
#ifdef DEBUG_XINCLUDE
|
||||||
printf("loading %s\n", URL);
|
printf("loading %s\n", URL);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef LIBXML_XPTR_ENABLED
|
||||||
|
/*
|
||||||
|
* If this is an XPointer evaluation, we want to assure that
|
||||||
|
* all entities have been resolved prior to processing the
|
||||||
|
* referenced document
|
||||||
|
*/
|
||||||
|
saveFlags = ctxt->parseFlags;
|
||||||
|
if (fragment != NULL) { /* if this is an XPointer eval */
|
||||||
|
ctxt->parseFlags |= XML_PARSE_NOENT;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
doc = xmlXIncludeParseFile(ctxt, (const char *)URL);
|
doc = xmlXIncludeParseFile(ctxt, (const char *)URL);
|
||||||
|
#ifdef LIBXML_XPTR_ENABLED
|
||||||
|
ctxt->parseFlags = saveFlags;
|
||||||
|
#endif
|
||||||
if (doc == NULL) {
|
if (doc == NULL) {
|
||||||
xmlFree(URL);
|
xmlFree(URL);
|
||||||
if (fragment != NULL)
|
if (fragment != NULL)
|
||||||
|
13
xpointer.c
13
xpointer.c
@ -2308,6 +2308,7 @@ next:
|
|||||||
(*level)++;
|
(*level)++;
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
|
skip: /* This label should only be needed if something is wrong! */
|
||||||
if (cur->next != NULL) {
|
if (cur->next != NULL) {
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
goto found;
|
goto found;
|
||||||
@ -2328,11 +2329,13 @@ found:
|
|||||||
(cur->type != XML_TEXT_NODE) &&
|
(cur->type != XML_TEXT_NODE) &&
|
||||||
(cur->type != XML_DOCUMENT_NODE) &&
|
(cur->type != XML_DOCUMENT_NODE) &&
|
||||||
(cur->type != XML_HTML_DOCUMENT_NODE) &&
|
(cur->type != XML_HTML_DOCUMENT_NODE) &&
|
||||||
(cur->type != XML_CDATA_SECTION_NODE))
|
(cur->type != XML_CDATA_SECTION_NODE)) {
|
||||||
goto next;
|
if (cur->type == XML_ENTITY_REF_NODE) { /* Shouldn't happen */
|
||||||
if (cur->type == XML_ENTITY_REF_NODE) {
|
TODO
|
||||||
TODO
|
goto skip;
|
||||||
}
|
}
|
||||||
|
goto next;
|
||||||
|
}
|
||||||
return(cur);
|
return(cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user