diff --git a/Lib/html/parser.py b/Lib/html/parser.py
index 941228072a3..a6d5be94fa3 100644
--- a/Lib/html/parser.py
+++ b/Lib/html/parser.py
@@ -458,4 +458,4 @@ class HTMLParser(_markupbase.ParserBase):
return '&'+s+';'
return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));",
- replaceEntities, s, re.ASCII)
+ replaceEntities, s, flags=re.ASCII)
diff --git a/Lib/test/test_htmlparser.py b/Lib/test/test_htmlparser.py
index 637ab01f126..d45e45327fe 100644
--- a/Lib/test/test_htmlparser.py
+++ b/Lib/test/test_htmlparser.py
@@ -377,7 +377,8 @@ class HTMLParserTolerantTestCase(TestCaseBase):
p = html.parser.HTMLParser()
self.assertEqual(p.unescape('bad;'),'bad;')
self.assertEqual(p.unescape('&'),'&')
-
+ # see #12888
+ self.assertEqual(p.unescape('{ ' * 1050), '{ ' * 1050)
def test_main():
support.run_unittest(HTMLParserTestCase, HTMLParserTolerantTestCase)
diff --git a/Misc/ACKS b/Misc/ACKS
index dd9e9f65fb8..fa70c72df5b 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -704,6 +704,7 @@ Douglas Orr
Michele OrrĂ¹
Oleg Oshmyan
Denis S. Otkidach
+Peter Otten
Michael Otteneder
R. M. Oudkerk
Russel Owen
diff --git a/Misc/NEWS b/Misc/NEWS
index 2389bf54b48..b15876b1cfa 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -271,6 +271,9 @@ Core and Builtins
Library
-------
+- Issue #12888: Fix a bug in HTMLParser.unescape that prevented it to escape
+ more than 128 entities. Patch by Peter Otten.
+
- Issue #12878: Expose a __dict__ attribute on io.IOBase and its subclasses.
- Issue #12636: IDLE reads the coding cookie when executing a Python script.