1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2024-10-26 12:25:09 +03:00

xinclude with parse="text" does not use the entity loader

For https://bugzilla.gnome.org/show_bug.cgi?id=552479

The code for xinclude parse="text" was not using the registered
entity loader, defeating attempts to control loading of files.
This commit is contained in:
Shaun McCance 2012-05-10 20:59:33 +08:00 committed by Daniel Veillard
parent fdf990c2ef
commit 4cf7325e1f

View File

@ -1796,6 +1796,8 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
int i;
xmlChar *encoding = NULL;
xmlCharEncoding enc = (xmlCharEncoding) 0;
xmlParserCtxtPtr pctxt;
xmlParserInputPtr inputStream;
/*
* Check the URL and remove any fragment identifier
@ -1870,11 +1872,23 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
/*
* Load it.
*/
buf = xmlParserInputBufferCreateFilename((const char *)URL, enc);
if (buf == NULL) {
pctxt = xmlNewParserCtxt();
inputStream = xmlLoadExternalEntity((const char*)URL, NULL, pctxt);
if(inputStream == NULL) {
xmlFreeParserCtxt(pctxt);
xmlFree(URL);
return(-1);
}
buf = inputStream->buf;
if (buf == NULL) {
xmlFreeInputStream (inputStream);
xmlFreeParserCtxt(pctxt);
xmlFree(URL);
return(-1);
}
if (buf->encoder)
xmlCharEncCloseFunc(buf->encoder);
buf->encoder = xmlGetCharEncodingHandler(enc);
node = xmlNewText(NULL);
/*
@ -1905,8 +1919,9 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
}
xmlBufferShrink(buf->buffer, len);
}
xmlFreeParserInputBuffer(buf);
xmlFreeParserCtxt(pctxt);
xmlXIncludeAddTxt(ctxt, node, URL);
xmlFreeInputStream(inputStream);
loaded:
/*