diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2014-01-28 15:52:42 -0500 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2014-01-29 16:34:18 -0500 |
commit | 79f5fce2a387f5dfc13e10146b36cb620a5bf166 (patch) | |
tree | dfdb30a7cfe69609dcb965cbee93d16e5a9ffd5f /src/lib | |
parent | c8b39ab597d50dc1889ac9448700a2b378b6ffdf (diff) | |
download | bcfg2-79f5fce2a387f5dfc13e10146b36cb620a5bf166.tar.gz bcfg2-79f5fce2a387f5dfc13e10146b36cb620a5bf166.tar.bz2 bcfg2-79f5fce2a387f5dfc13e10146b36cb620a5bf166.zip |
Client: let lxml.etree XML implementation parse very large documents
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/Bcfg2/Client/XML.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/lib/Bcfg2/Client/XML.py b/src/lib/Bcfg2/Client/XML.py index 561cd25a8..e35ce4497 100644 --- a/src/lib/Bcfg2/Client/XML.py +++ b/src/lib/Bcfg2/Client/XML.py @@ -5,17 +5,25 @@ # pylint: disable=E0611,W0611,W0613,C0103 try: - from lxml.etree import Element, SubElement, tostring + from lxml.etree import Element, SubElement, tostring, XMLParser from lxml.etree import XMLSyntaxError as ParseError from lxml.etree import XML as _XML from Bcfg2.Compat import wraps driver = 'lxml' + try: + # libxml2 2.9.0+ doesn't parse 10M+ documents by default: + # https://mail.gnome.org/archives/commits-list/2012-August/msg00645.html + _parser = XMLParser(huge_tree=True) + except TypeError: + _parser = XMLParser() + @wraps(_XML) def XML(val, **kwargs): """ unicode strings w/encoding declaration are not supported in recent lxml.etree, so we try to read XML, and if it fails we try encoding the string. """ + kwargs.setdefault('parser', _parser) try: return _XML(val, **kwargs) except ValueError: |