Commit 8e596a76 authored by Ezio Melotti's avatar Ezio Melotti
Browse files

#17802: Fix an UnboundLocalError in html.parser. Initial tests by Thomas Barlow.

parent a771a1b4
...@@ -249,6 +249,7 @@ class HTMLParser(_markupbase.ParserBase): ...@@ -249,6 +249,7 @@ class HTMLParser(_markupbase.ParserBase):
if self.strict: if self.strict:
self.error("EOF in middle of entity or char ref") self.error("EOF in middle of entity or char ref")
else: else:
k = match.end()
if k <= i: if k <= i:
k = n k = n
i = self.updatepos(i, i + 1) i = self.updatepos(i, i + 1)
......
...@@ -535,6 +535,20 @@ class HTMLParserTolerantTestCase(HTMLParserStrictTestCase): ...@@ -535,6 +535,20 @@ class HTMLParserTolerantTestCase(HTMLParserStrictTestCase):
] ]
self._run_check(html, expected) self._run_check(html, expected)
def test_EOF_in_charref(self):
# see #17802
# This test checks that the UnboundLocalError reported in the issue
# is not raised, however I'm not sure the returned values are correct.
# Maybe HTMLParser should use self.unescape for these
data = [
('a&', [('data', 'a&')]),
('a&b', [('data', 'ab')]),
('a&b ', [('data', 'a'), ('entityref', 'b'), ('data', ' ')]),
('a&b;', [('data', 'a'), ('entityref', 'b')]),
]
for html, expected in data:
self._run_check(html, expected)
def test_unescape_function(self): def test_unescape_function(self):
p = self.get_collector() p = self.get_collector()
self.assertEqual(p.unescape('&#bad;'),'&#bad;') self.assertEqual(p.unescape('&#bad;'),'&#bad;')
......
...@@ -44,6 +44,9 @@ Core and Builtins ...@@ -44,6 +44,9 @@ Core and Builtins
Library Library
------- -------
- Issue #17802: Fix an UnboundLocalError in html.parser. Initial tests by
Thomas Barlow.
- Issue #17192: Restore the patch for Issue #11729 which was ommitted in - Issue #17192: Restore the patch for Issue #11729 which was ommitted in
3.3.1 when updating the bundled version of libffi used by ctypes. Update 3.3.1 when updating the bundled version of libffi used by ctypes. Update
many libffi files that were missed in 3.3.1's update to libffi-3.0.13. many libffi files that were missed in 3.3.1's update to libffi-3.0.13.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment