Issue with mistune 3.1.0
mistune 3.1.0 was released on Dec 30, 2024 and causes an error on some Hyperkitty pages:
mailmanweb.log:
Traceback (most recent call last):
File "/usr/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/hyperkitty/lib/view_helpers.py", line 137, in inner
return func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/hyperkitty/views/thread.py", line 269, in replies
replies_html = replies_tpl.render(context, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 175, in render
return self._render(context)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/loader_tags.py", line 208, in render
return template.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 177, in render
return self._render(context)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 1064, in render
output = self.filter_expression.resolve(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/django/template/base.py", line 742, in resolve
new_obj = func(obj, *arg_vals)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/hyperkitty/templatetags/decorate.py", line 42, in render
return mark_safe(text_renderer(content))
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/markdown.py", line 124, in __call__
return self.parse(s)[0]
^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/markdown.py", line 97, in parse
self.block.parse(state)
File "/usr/lib/python3.12/site-packages/mistune/block_parser.py", line 456, in parse
end_pos2 = self.parse_method(m, state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/core.py", line 213, in parse_method
return func(m, state)
^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/block_parser.py", line 368, in parse_block_quote
text, end_pos = self.extract_block_quote(m, state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/block_parser.py", line 345, in extract_block_quote
end_pos = self.parse_method(m4, state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/core.py", line 213, in parse_method
return func(m, state)
^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/block_parser.py", line 387, in parse_list
return parse_list(self, m, state)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/list_parser.py", line 64, in parse_list
groups = _parse_list_item(block, bullet, groups, token, state, rules)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/list_parser.py", line 178, in _parse_list_item
block.parse(child, rules)
File "/usr/lib/python3.12/site-packages/mistune/block_parser.py", line 456, in parse
end_pos2 = self.parse_method(m, state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/mistune/core.py", line 211, in parse_method
assert lastgroup
^^^^^^^^^
AssertionError
Examples of the pages that suffer from the error:
- https://lists.mailman3.com/hyperkitty/list/sfd-discuss@mailman3.com/message/6335D4DQEKJIK4HDGH2AJINAWWIOMLB3/
- https://lists.mailman3.com/hyperkitty/list/dillo-dev@mailman3.com/thread/NRTF642MIGRAUGHZWHLYBJUTG4VW36KD/
(There is no error now since we downgraded mistune to version 3.0.2.)
Edited by Danil Smirnov