Kaydet (Commit) 164540fe authored tarafından Senthil Kumaran's avatar Senthil Kumaran

Fix Issue10759 - html.parser.unescape() fails on HTML entities with incorrect syntax

üst 3b4499c5
...@@ -434,6 +434,7 @@ class HTMLParser(_markupbase.ParserBase): ...@@ -434,6 +434,7 @@ class HTMLParser(_markupbase.ParserBase):
return s return s
def replaceEntities(s): def replaceEntities(s):
s = s.groups()[0] s = s.groups()[0]
try:
if s[0] == "#": if s[0] == "#":
s = s[1:] s = s[1:]
if s[0] in ['x','X']: if s[0] in ['x','X']:
...@@ -441,6 +442,8 @@ class HTMLParser(_markupbase.ParserBase): ...@@ -441,6 +442,8 @@ class HTMLParser(_markupbase.ParserBase):
else: else:
c = int(s) c = int(s)
return chr(c) return chr(c)
except ValueError:
return '&#'+ s +';'
else: else:
# Cannot use name2codepoint directly, because HTMLParser # Cannot use name2codepoint directly, because HTMLParser
# supports apos, which is not part of HTML 4 # supports apos, which is not part of HTML 4
......
...@@ -356,6 +356,11 @@ class HTMLParserTolerantTestCase(TestCaseBase): ...@@ -356,6 +356,11 @@ class HTMLParserTolerantTestCase(TestCaseBase):
[('action', 'bogus|&#()value')])], [('action', 'bogus|&#()value')])],
collector = self.collector) collector = self.collector)
def test_unescape_function(self):
p = html.parser.HTMLParser()
self.assertEqual(p.unescape('&#bad;'),'&#bad;')
self.assertEqual(p.unescape('&'),'&')
def test_main(): def test_main():
support.run_unittest(HTMLParserTestCase, HTMLParserTolerantTestCase) support.run_unittest(HTMLParserTestCase, HTMLParserTolerantTestCase)
......
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