From e021f4b20622d272349ce9d05b9b1b4f5d183f8a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 24 May 2010 21:46:25 +0000 Subject: [PATCH] Recorded merge of revisions 81500-81501 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r81500 | victor.stinner | 2010-05-24 23:33:24 +0200 (lun., 24 mai 2010) | 2 lines Issue #6662: Fix parsing of malformatted charref (&#bad;) ........ r81501 | victor.stinner | 2010-05-24 23:37:28 +0200 (lun., 24 mai 2010) | 2 lines Add the author of the last fix (Issue #6662) ........ --- Lib/html/parser.py | 3 +++ Lib/test/test_htmlparser.py | 7 +++++++ Misc/ACKS | 1 + Misc/NEWS | 3 +++ 4 files changed, 14 insertions(+) diff --git a/Lib/html/parser.py b/Lib/html/parser.py index 83a58258c7a..c2c7f6bf5da 100644 --- a/Lib/html/parser.py +++ b/Lib/html/parser.py @@ -175,6 +175,9 @@ def goahead(self, end): i = self.updatepos(i, k) continue else: + if ";" in rawdata[i:]: #bail by consuming &# + self.handle_data(rawdata[0:2]) + i = self.updatepos(i, 2) break elif startswith('&', i): match = entityref.match(rawdata, i) diff --git a/Lib/test/test_htmlparser.py b/Lib/test/test_htmlparser.py index dd74aac09b2..e982218dba1 100644 --- a/Lib/test/test_htmlparser.py +++ b/Lib/test/test_htmlparser.py @@ -136,6 +136,13 @@ def test_simple_html(self): ("data", "\n"), ]) + def test_malformatted_charref(self): + self._run_check("

&#bad;

", [ + ("starttag", "p", []), + ("data", "&#bad;"), + ("endtag", "p"), + ]) + def test_unclosed_entityref(self): self._run_check("&entityref foo", [ ("entityref", "entityref"), diff --git a/Misc/ACKS b/Misc/ACKS index b35acaf555d..ee625420e7c 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -871,3 +871,4 @@ Siebren van der Zee Uwe Zessin Tarek Ziadé Peter Åstrand +Fredrik Håård diff --git a/Misc/NEWS b/Misc/NEWS index 36f374bdc95..df363451ac4 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -392,6 +392,9 @@ C-API Library ------- +- Issue #6662: Fix parsing of malformatted charref (&#bad;), patch written by + Fredrik Håård + - Issue #8540: Decimal module: rename the Context._clamp attribute to Context.clamp and make it public. This is useful in creating contexts that correspond to the decimal interchange formats