Fix Issue10759 - html.parser.unescape() fails on HTML entities with incorrect syntax
This commit is contained in:
parent
3b4499c5c7
commit
164540fee1
|
@ -434,13 +434,16 @@ class HTMLParser(_markupbase.ParserBase):
|
|||
return s
|
||||
def replaceEntities(s):
|
||||
s = s.groups()[0]
|
||||
if s[0] == "#":
|
||||
s = s[1:]
|
||||
if s[0] in ['x','X']:
|
||||
c = int(s[1:], 16)
|
||||
else:
|
||||
c = int(s)
|
||||
return chr(c)
|
||||
try:
|
||||
if s[0] == "#":
|
||||
s = s[1:]
|
||||
if s[0] in ['x','X']:
|
||||
c = int(s[1:], 16)
|
||||
else:
|
||||
c = int(s)
|
||||
return chr(c)
|
||||
except ValueError:
|
||||
return '&#'+ s +';'
|
||||
else:
|
||||
# Cannot use name2codepoint directly, because HTMLParser
|
||||
# supports apos, which is not part of HTML 4
|
||||
|
|
|
@ -356,6 +356,11 @@ class HTMLParserTolerantTestCase(TestCaseBase):
|
|||
[('action', 'bogus|&#()value')])],
|
||||
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():
|
||||
support.run_unittest(HTMLParserTestCase, HTMLParserTolerantTestCase)
|
||||
|
|
Loading…
Reference in New Issue