diff options
author | Marek Suscak <marek.suscak@gmail.com> | 2022-05-16 16:19:04 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-16 16:19:04 (GMT) |
commit | 518b2389673833887b26a8474eeb9530d17e2b8d (patch) | |
tree | 82c3aed4174705ba9d5290ae9e85f914c4042b18 | |
parent | 1699a5ee13a39da73f5d9a8c5def4438200b7b59 (diff) | |
download | cpython-518b2389673833887b26a8474eeb9530d17e2b8d.zip cpython-518b2389673833887b26a8474eeb9530d17e2b8d.tar.gz cpython-518b2389673833887b26a8474eeb9530d17e2b8d.tar.bz2 |
[3.9] bpo-34480: fix bug where match variable is used prior to being defined (GH-17643) (GH-32256)
Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Ćukasz Langa <lukasz@langa.pl>
-rw-r--r-- | Lib/_markupbase.py | 1 | ||||
-rw-r--r-- | Lib/test/test_htmlparser.py | 22 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-04-09-11-28-49.bpo-34480.Pw-GJ6.rst | 3 |
3 files changed, 26 insertions, 0 deletions
diff --git a/Lib/_markupbase.py b/Lib/_markupbase.py index 2af5f1c..7091eb6 100644 --- a/Lib/_markupbase.py +++ b/Lib/_markupbase.py @@ -157,6 +157,7 @@ class ParserBase: match= _msmarkedsectionclose.search(rawdata, i+3) else: self.error('unknown status keyword %r in marked section' % rawdata[i+3:j]) + match = None if not match: return -1 if report: diff --git a/Lib/test/test_htmlparser.py b/Lib/test/test_htmlparser.py index 1291775..44a76a4 100644 --- a/Lib/test/test_htmlparser.py +++ b/Lib/test/test_htmlparser.py @@ -787,5 +787,27 @@ class AttributesTestCase(TestCaseBase): ('starttag', 'form', [('action', 'bogus|&#()value')])]) + def test_invalid_keyword_error_exception(self): + # bpo-34480: check that subclasses that define an + # error method that raises an exception work + class InvalidMarkupException(Exception): + pass + class MyHTMLParser(html.parser.HTMLParser): + def error(self, message): + raise InvalidMarkupException(message) + parser = MyHTMLParser() + with self.assertRaises(InvalidMarkupException): + parser.feed('<![invalid>') + + def test_invalid_keyword_error_pass(self): + # bpo-34480: check that subclasses that define an + # error method that doesn't raise an exception work + class MyHTMLParser(html.parser.HTMLParser): + def error(self, message): + pass + parser = MyHTMLParser() + self.assertEqual(parser.feed('<![invalid>'), None) + + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Library/2022-04-09-11-28-49.bpo-34480.Pw-GJ6.rst b/Misc/NEWS.d/next/Library/2022-04-09-11-28-49.bpo-34480.Pw-GJ6.rst new file mode 100644 index 0000000..748df89 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-04-09-11-28-49.bpo-34480.Pw-GJ6.rst @@ -0,0 +1,3 @@ +Fix a bug where :mod:`_markupbase` raised an :exc:`UnboundLocalError` +when an invalid keyword was found in marked section. Patch by Marek +Suscak. |