Fix Issue10759 - HTMLParser.unescape() to handle malform charrefs.

This commit is contained in:
Senthil Kumaran 2010-12-28 16:05:07 +00:00
parent 06fdbedf81
commit 3f60f09eb2
2 changed files with 15 additions and 7 deletions

View File

@ -367,13 +367,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 unichr(c)
try:
if s[0] == "#":
s = s[1:]
if s[0] in ['x','X']:
c = int(s[1:], 16)
else:
c = int(s)
return unichr(c)
except ValueError:
return '&#'+s+';'
else:
# Cannot use name2codepoint directly, because HTMLParser supports apos,
# which is not part of HTML 4

View File

@ -320,6 +320,11 @@ DOCTYPE html [
("endtag", "p"),
])
def test_unescape_function(self):
parser = HTMLParser.HTMLParser()
self.assertEqual(parser.unescape('&#bad;'),'&#bad;')
self.assertEqual(parser.unescape('&'),'&')
def test_main():
test_support.run_unittest(HTMLParserTestCase)