summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael van Tellingen <michael@mvantellingen.nl>2016-07-18 22:00:13 +0200
committerMichael van Tellingen <michael@mvantellingen.nl>2016-07-18 22:00:13 +0200
commita4437df9bda4475db7c26bef3cda9d7394590ef3 (patch)
tree74437f420355d8c007e5e48062b27ec6b7942beb
parenteb88652a6c645be95696bbdee6f44b202c9c58ff (diff)
downloadpython-lxml-a4437df9bda4475db7c26bef3cda9d7394590ef3.tar.gz
Fix setting the base url for etree.Resolver.resolve_string
See https://github.com/GNOME/libxml2/blob/master/parserInternals.c#L1549 We seem to get away with only setting the _filename so that relative url's are resolved based on the value. Fixes https://bugs.launchpad.net/lxml/+bug/1568167
-rw-r--r--src/lxml/includes/xmlparser.pxd1
-rw-r--r--src/lxml/parser.pxi2
2 files changed, 3 insertions, 0 deletions
diff --git a/src/lxml/includes/xmlparser.pxd b/src/lxml/includes/xmlparser.pxd
index 74fe7586..187b079f 100644
--- a/src/lxml/includes/xmlparser.pxd
+++ b/src/lxml/includes/xmlparser.pxd
@@ -56,6 +56,7 @@ cdef extern from "libxml/tree.h":
const_xmlChar* base
const_xmlChar* cur
const_xmlChar* end
+ const_char *filename
ctypedef struct xmlParserInputBuffer:
void* context
diff --git a/src/lxml/parser.pxi b/src/lxml/parser.pxi
index 9431b21e..0c0a8b20 100644
--- a/src/lxml/parser.pxi
+++ b/src/lxml/parser.pxi
@@ -447,6 +447,8 @@ cdef xmlparser.xmlParserInput* _local_resolver(const_char* c_url, const_char* c_
data = doc_ref._data_bytes
c_input = xmlparser.xmlNewInputStream(c_context)
if c_input is not NULL:
+ if doc_ref._filename:
+ c_input.filename = <char *>tree.xmlStrdup(_xcstr(doc_ref._filename))
c_input.base = _xcstr(data)
c_input.length = python.PyBytes_GET_SIZE(data)
c_input.cur = c_input.base