Merged revisions 87542 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r87542 | senthil.kumaran | 2010-12-28 23:55:16 +0800 (Tue, 28 Dec 2010) | 3 lines
Fix Issue10759 - html.parser.unescape() fails on HTML entities with incorrect syntax
........
diff --git a/Lib/html/parser.py b/Lib/html/parser.py
index c2c7f6b..3f68e18 100644
--- a/Lib/html/parser.py
+++ b/Lib/html/parser.py
@@ -367,13 +367,16 @@
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
diff --git a/Lib/test/test_htmlparser.py b/Lib/test/test_htmlparser.py
index e982218..661d41d 100755
--- a/Lib/test/test_htmlparser.py
+++ b/Lib/test/test_htmlparser.py
@@ -319,6 +319,10 @@
self._run_check("<html foo='€&aa&unsupported;'>", [
("starttag", "html", [("foo", "\u20AC&aa&unsupported;")])
])
+ def test_unescape_function(self):
+ p = html.parser.HTMLParser()
+ self.assertEqual(p.unescape('&#bad;'),'&#bad;')
+ self.assertEqual(p.unescape('&'),'&')
def test_main():