diff options
author | Christian Heimes <christian@python.org> | 2021-03-08 11:25:48 +0100 |
---|---|---|
committer | Christian Heimes <christian@python.org> | 2021-03-08 11:30:31 +0100 |
commit | 35ebedca6fb072b25a177d5446f9a1bf176d581a (patch) | |
tree | ca05548088327a20584cb39996b250af5d31bb9e | |
parent | 1ac00c6dcb7696b960611ebdd80964907d7d07ae (diff) | |
download | defusedxml-git-35ebedca6fb072b25a177d5446f9a1bf176d581a.tar.gz |
Fix regression defusedxml.ElementTree.ParseError
The ``defusedxml.ElementTree.ParseError`` exception is now the same class object
as ``xml.etree.ElementTree.ParseError`` again. The regression was
introduced by new patching code as part of PR #60.
See: https://github.com/tiran/defusedxml/pull/60
Fixes: https://github.com/tiran/defusedxml/issues/63
Signed-off-by: Christian Heimes <christian@python.org>
-rw-r--r-- | CHANGES.txt | 3 | ||||
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | defusedxml/ElementTree.py | 8 | ||||
-rw-r--r-- | defusedxml/cElementTree.py | 2 | ||||
-rw-r--r-- | tests.py | 9 |
5 files changed, 22 insertions, 3 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 2de9129..6d8c34d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,9 @@ defusedxml 0.8.0.dev1 - Drop support for Python 2.7, 3.4, and 3.5. - Add ``defusedxml.ElementTree.fromstringlist()`` +- Fix regression ``defusedxml.ElementTree.ParseError`` (#63) + The ``ParseError`` exception is now the same class object as + ``xml.etree.ElementTree.ParseError`` again. defusedxml 0.7.0 @@ -720,6 +720,9 @@ See <https://www.python.org/psf/license> for licensing details. - Drop support for Python 2.7, 3.4, and 3.5. - Add `defusedxml.ElementTree.fromstringlist()` + - Fix regression `defusedxml.ElementTree.ParseError` (\#63) The + `ParseError` exception is now the same class object as + `xml.etree.ElementTree.ParseError` again. ## defusedxml 0.7.0 diff --git a/defusedxml/ElementTree.py b/defusedxml/ElementTree.py index 7209661..15c179f 100644 --- a/defusedxml/ElementTree.py +++ b/defusedxml/ElementTree.py @@ -9,6 +9,7 @@ from __future__ import print_function, absolute_import import sys import warnings +from xml.etree.ElementTree import ParseError from xml.etree.ElementTree import TreeBuilder as _TreeBuilder from xml.etree.ElementTree import parse as _parse from xml.etree.ElementTree import tostring @@ -51,12 +52,13 @@ def _get_py3_cls(): _XMLParser = pure_pymod.XMLParser _iterparse = pure_pymod.iterparse - ParseError = pure_pymod.ParseError + # patch pure module to use ParseError from C extension + pure_pymod.ParseError = ParseError - return _XMLParser, _iterparse, ParseError + return _XMLParser, _iterparse -_XMLParser, _iterparse, ParseError = _get_py3_cls() +_XMLParser, _iterparse = _get_py3_cls() _sentinel = object() diff --git a/defusedxml/cElementTree.py b/defusedxml/cElementTree.py index 74892cd..bf4bcd8 100644 --- a/defusedxml/cElementTree.py +++ b/defusedxml/cElementTree.py @@ -19,6 +19,7 @@ from .ElementTree import ( parse, tostring, DefusedXMLParser, + ParseError, ) __origin__ = "xml.etree.cElementTree" @@ -31,6 +32,7 @@ warnings.warn( ) __all__ = [ + "ParseError", "XML", "XMLParse", "XMLParser", @@ -218,6 +218,15 @@ class TestDefusedElementTree(BaseTests): self.assertIs(orig_elementtree, second_elementtree) + def test_orig_parseerror(self): + # https://github.com/tiran/defusedxml/issues/63 + self.assertIs(self.module.ParseError, orig_elementtree.ParseError) + try: + self.parseString("invalid") + except Exception as e: + self.assertIsInstance(e, orig_elementtree.ParseError) + self.assertIsInstance(e, self.module.ParseError) + class TestDefusedcElementTree(TestDefusedElementTree): module = cElementTree |