cpython: 7f8cd879687b (original) (raw)
Mercurial > cpython
changeset 95892:7f8cd879687b 3.4
Issue #24125: Saved error's line and column numbers when an error is occured during closing expatreader. Fixed a regression introduced in issue #23865. [#24125]
Serhiy Storchaka storchaka@gmail.com | |
---|---|
date | Wed, 06 May 2015 09:36:06 +0300 |
parents | 29512e2015d9 |
children | 1fb83fa2cdef 5418ab3e5556 |
files | Lib/test/test_sax.py Lib/xml/sax/expatreader.py |
diffstat | 2 files changed, 15 insertions(+), 2 deletions(-)[+] [-] Lib/test/test_sax.py 2 Lib/xml/sax/expatreader.py 15 |
line wrap: on
line diff
--- a/Lib/test/test_sax.py +++ b/Lib/test/test_sax.py @@ -1126,6 +1126,8 @@ class ErrorReportingTest(unittest.TestCa parser = create_parser() parser.setContentHandler(ContentHandler()) # do nothing self.assertRaises(SAXParseException, parser.parse, StringIO(""))
self.assertEqual(parser.getColumnNumber(), 5)[](#l1.7)
self.assertEqual(parser.getLineNumber(), 1)[](#l1.8)
def test_sax_parse_exception_str(self): # pass various values from a locator to the SAXParseException to
--- a/Lib/xml/sax/expatreader.py +++ b/Lib/xml/sax/expatreader.py @@ -43,6 +43,9 @@ else: _mkproxy = weakref.proxy del weakref, _weakref +class _ClosedParser:
--- ExpatLocator
class ExpatLocator(xmlreader.Locator): @@ -211,16 +214,24 @@ class ExpatParser(xmlreader.IncrementalP self._err_handler.fatalError(exc) def close(self):
if self._entity_stack or self._parser is None:[](#l2.17)
if (self._entity_stack or self._parser is None or[](#l2.18)
isinstance(self._parser, _ClosedParser)):[](#l2.19) # If we are completing an external entity, do nothing here[](#l2.20) return[](#l2.21) try:[](#l2.22) self.feed("", isFinal = 1)[](#l2.23) self._cont_handler.endDocument()[](#l2.24)
finally:[](#l2.25) self._parsing = 0[](#l2.26) # break cycle created by expat handlers pointing to our methods[](#l2.27) self._parser = None[](#l2.28)
finally:[](#l2.29)
self._parsing = 0[](#l2.30)
if self._parser is not None:[](#l2.31)
# Keep ErrorColumnNumber and ErrorLineNumber after closing.[](#l2.32)
parser = _ClosedParser()[](#l2.33)
parser.ErrorColumnNumber = self._parser.ErrorColumnNumber[](#l2.34)
parser.ErrorLineNumber = self._parser.ErrorLineNumber[](#l2.35)
self._parser = parser[](#l2.36) bs = self._source.getByteStream()[](#l2.37) if bs is not None:[](#l2.38) bs.close()[](#l2.39)