Skip to content

Issue with mistune 3.1.0

mistune 3.1.0 was released on Dec 30, 2024 and causes an error on some Hyperkitty pages:

Screenshot_2025-01-11_at_09.08.06

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:

(There is no error now since we downgraded mistune to version 3.0.2.)

Edited by Danil Smirnov