From 94aafb788fc0aae009ea3bc04cb18b7998341af1 Mon Sep 17 00:00:00 2001 From: Ben Tucker Date: Sat, 27 Dec 2025 18:44:50 -0600 Subject: [PATCH 1/2] Fix infinite loop when text contains multiple unclosed comments The updatepos() override was resetting the parser position to 0, causing infinite loops when multiple bogus/unclosed comments appeared in the input (e.g., `': self.handle_data('<') + pos = self.line_offset + self.offset + self.override_comment_start = pos - 1 if self.rawdata[pos - 1:pos] == '<' else pos self.override_comment_update = True return self.handle_empty_tag(''.format(data), is_block=True) @@ -283,8 +287,8 @@ def handle_comment(self, data: str): def updatepos(self, i: int, j: int) -> int: if self.override_comment_update: self.override_comment_update = False - i = 0 - j = 1 + i = self.override_comment_start + j = self.override_comment_start + 1 return super().updatepos(i, j) def handle_decl(self, data: str): diff --git a/tests/test_syntax/blocks/test_html_blocks.py b/tests/test_syntax/blocks/test_html_blocks.py index bee30366..3251d0fa 100644 --- a/tests/test_syntax/blocks/test_html_blocks.py +++ b/tests/test_syntax/blocks/test_html_blocks.py @@ -1684,3 +1684,17 @@ def test_noname_tag(self): """ ) ) + + def test_multiple_bogus_comments_no_hang(self): + """Test that multiple bogus comments (</ and </

' + ) + + def test_multiple_unclosed_comments_no_hang(self): + """Test that multiple unclosed comments don't cause infinite loop.""" + self.assertMarkdownRenders( + '