Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-Markdown for openSUSE:Factory 
checked in at 2026-01-27 16:06:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Markdown (Old)
 and      /work/SRC/openSUSE:Factory/.python-Markdown.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Markdown"

Tue Jan 27 16:06:49 2026 rev:59 rq:1329160 version:3.10.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Markdown/python-Markdown.changes  
2025-11-07 18:20:06.933532412 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-Markdown.new.1928/python-Markdown.changes    
    2026-01-27 16:06:58.444653917 +0100
@@ -1,0 +2,12 @@
+Fri Jan 23 16:12:26 UTC 2026 - BenoĆ®t Monin <[email protected]>
+
+- update to version 3.10.1:
+  * Ensure nested elements inside inline comments are properly
+    unescaped (#1571).
+  * Make the docs build successfully with mkdocstrings-python 2.0
+    (#1575).
+  * Fix infinite loop when multiple bogus or unclosed HTML comments
+    appear in input (#1578).
+  * Fix another infinite loop when handling bad comments (#1586).
+
+-------------------------------------------------------------------

Old:
----
  markdown-3.10.tar.gz

New:
----
  markdown-3.10.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-Markdown.spec ++++++
--- /var/tmp/diff_new_pack.d2T9sN/_old  2026-01-27 16:06:59.492698114 +0100
+++ /var/tmp/diff_new_pack.d2T9sN/_new  2026-01-27 16:06:59.496698283 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-Markdown
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -32,7 +32,7 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-Markdown%{psuffix}
-Version:        3.10
+Version:        3.10.1
 Release:        0
 Summary:        Python implementation of Markdown
 License:        BSD-3-Clause

++++++ markdown-3.10.tar.gz -> markdown-3.10.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/Markdown.egg-info/PKG-INFO 
new/markdown-3.10.1/Markdown.egg-info/PKG-INFO
--- old/markdown-3.10/Markdown.egg-info/PKG-INFO        2025-11-03 
20:51:04.000000000 +0100
+++ new/markdown-3.10.1/Markdown.egg-info/PKG-INFO      2026-01-21 
19:09:17.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: Markdown
-Version: 3.10
+Version: 3.10.1
 Summary: Python implementation of John Gruber's Markdown.
 Author: Manfred Stienstra, Yuri Takhteyev
 Author-email: Waylan limberg <[email protected]>
@@ -43,7 +43,7 @@
 Requires-Dist: mkdocs>=1.6; extra == "docs"
 Requires-Dist: mkdocs-nature>=0.6; extra == "docs"
 Requires-Dist: mdx_gh_links>=0.2; extra == "docs"
-Requires-Dist: mkdocstrings[python]; extra == "docs"
+Requires-Dist: mkdocstrings[python]>=0.28.3; extra == "docs"
 Requires-Dist: mkdocs-gen-files; extra == "docs"
 Requires-Dist: mkdocs-section-index; extra == "docs"
 Requires-Dist: mkdocs-literate-nav; extra == "docs"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/Markdown.egg-info/requires.txt 
new/markdown-3.10.1/Markdown.egg-info/requires.txt
--- old/markdown-3.10/Markdown.egg-info/requires.txt    2025-11-03 
20:51:04.000000000 +0100
+++ new/markdown-3.10.1/Markdown.egg-info/requires.txt  2026-01-21 
19:09:17.000000000 +0100
@@ -3,7 +3,7 @@
 mkdocs>=1.6
 mkdocs-nature>=0.6
 mdx_gh_links>=0.2
-mkdocstrings[python]
+mkdocstrings[python]>=0.28.3
 mkdocs-gen-files
 mkdocs-section-index
 mkdocs-literate-nav
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/PKG-INFO new/markdown-3.10.1/PKG-INFO
--- old/markdown-3.10/PKG-INFO  2025-11-03 20:51:04.667874000 +0100
+++ new/markdown-3.10.1/PKG-INFO        2026-01-21 19:09:17.219820000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: Markdown
-Version: 3.10
+Version: 3.10.1
 Summary: Python implementation of John Gruber's Markdown.
 Author: Manfred Stienstra, Yuri Takhteyev
 Author-email: Waylan limberg <[email protected]>
@@ -43,7 +43,7 @@
 Requires-Dist: mkdocs>=1.6; extra == "docs"
 Requires-Dist: mkdocs-nature>=0.6; extra == "docs"
 Requires-Dist: mdx_gh_links>=0.2; extra == "docs"
-Requires-Dist: mkdocstrings[python]; extra == "docs"
+Requires-Dist: mkdocstrings[python]>=0.28.3; extra == "docs"
 Requires-Dist: mkdocs-gen-files; extra == "docs"
 Requires-Dist: mkdocs-section-index; extra == "docs"
 Requires-Dist: mkdocs-literate-nav; extra == "docs"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/docs/changelog.md 
new/markdown-3.10.1/docs/changelog.md
--- old/markdown-3.10/docs/changelog.md 2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/docs/changelog.md       2026-01-21 19:09:10.000000000 
+0100
@@ -10,6 +10,15 @@
 [Python Version 
Specification](https://packaging.python.org/en/latest/specifications/version-specifiers/).
 See the [Contributing Guide](contributing.md) for details.
 
+## [3.10.1] - 2026-01-21
+
+### Fixed
+
+* Ensure nested elements inside inline comments are properly unescaped (#1571).
+* Make the docs build successfully with mkdocstrings-python 2.0 (#1575).
+* Fix infinite loop when multiple bogus or unclosed HTML comments appear in 
input (#1578).
+* Fix another infinite loop when handling bad comments (#1586).
+
 ## [3.10.0] - 2025-11-03
 
 ### Changed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/markdown-3.10/docs/templates/python/nature/attribute.html.jinja 
new/markdown-3.10.1/docs/templates/python/nature/attribute.html.jinja
--- old/markdown-3.10/docs/templates/python/nature/attribute.html.jinja 
2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/docs/templates/python/nature/attribute.html.jinja       
2026-01-21 19:09:10.000000000 +0100
@@ -1,7 +1,7 @@
 {% extends "_base/attribute.html.jinja" %}
 
 {% block heading scoped %}
-  <a class="doc-source-link" href="{{ config.source.repo }}/tree/{{ 
config.source.tag }}/{{ attribute.relative_filepath }}#L{{ attribute.lineno 
}}{% if attribute.endlineno > attribute.lineno %}-L{{ attribute.endlineno }}{% 
endif %}" title='View source code on GitHub'>&lsaquo;&rsaquo;</a>
+  <a class="doc-source-link" href="{{ config.extra.source.repo }}/tree/{{ 
config.extra.source.tag }}/{{ attribute.relative_filepath }}#L{{ 
attribute.lineno }}{% if attribute.endlineno > attribute.lineno %}-L{{ 
attribute.endlineno }}{% endif %}" title='View source code on 
GitHub'>&lsaquo;&rsaquo;</a>
   {% if config.show_symbol_type_heading %}<code class="doc-symbol 
doc-symbol-heading doc-symbol-attribute"></code>{% endif %}
   {%+ filter highlight(language="python", inline=True) %}
     {{ attribute_name }}{% if attribute.annotation %}: {{ attribute.annotation 
}}{% endif %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/markdown-3.10/docs/templates/python/nature/class.html.jinja 
new/markdown-3.10.1/docs/templates/python/nature/class.html.jinja
--- old/markdown-3.10/docs/templates/python/nature/class.html.jinja     
2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/docs/templates/python/nature/class.html.jinja   
2026-01-21 19:09:10.000000000 +0100
@@ -1,6 +1,6 @@
 {% extends "_base/class.html.jinja" %}
 
 {% block heading scoped %}
-  <a class="doc-source-link" href="{{ config.source.repo }}/tree/{{ 
config.source.tag }}/{{ class.relative_filepath }}#L{{ class.lineno }}" 
title="{{ config.source.title }}">&lsaquo;&rsaquo;</a>
+  <a class="doc-source-link" href="{{ config.extra.source.repo }}/tree/{{ 
config.extra.source.tag }}/{{ class.relative_filepath }}#L{{ class.lineno }}" 
title="{{ config.extra.source.title }}">&lsaquo;&rsaquo;</a>
   {{ super() }}
 {% endblock heading %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/markdown-3.10/docs/templates/python/nature/function.html.jinja 
new/markdown-3.10.1/docs/templates/python/nature/function.html.jinja
--- old/markdown-3.10/docs/templates/python/nature/function.html.jinja  
2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/docs/templates/python/nature/function.html.jinja        
2026-01-21 19:09:10.000000000 +0100
@@ -1,6 +1,6 @@
 {% extends "_base/function.html.jinja" %}
 
 {% block heading scoped %}
-  <a class="doc-source-link" href="{{ config.source.repo }}/tree/{{ 
config.source.tag }}/{{ function.relative_filepath }}#L{{ function.lineno }}{% 
if function.endlineno > function.lineno %}-L{{ function.endlineno }}{% endif 
%}" title="{{ config.source.title }}">&lsaquo;&rsaquo;</a>
+  <a class="doc-source-link" href="{{ config.extra.source.repo }}/tree/{{ 
config.extra.source.tag }}/{{ function.relative_filepath }}#L{{ function.lineno 
}}{% if function.endlineno > function.lineno %}-L{{ function.endlineno }}{% 
endif %}" title="{{ config.extra.source.title }}">&lsaquo;&rsaquo;</a>
   {{ super() }}
 {% endblock heading %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/markdown-3.10/docs/templates/python/nature/module.html.jinja 
new/markdown-3.10.1/docs/templates/python/nature/module.html.jinja
--- old/markdown-3.10/docs/templates/python/nature/module.html.jinja    
2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/docs/templates/python/nature/module.html.jinja  
2026-01-21 19:09:10.000000000 +0100
@@ -1,6 +1,6 @@
 {% extends "_base/module.html.jinja" %}
 
 {% block heading scoped %}
-  <a class="doc-source-link" href="{{ config.source.repo }}/tree/{{ 
config.source.tag }}/{{ module.relative_filepath }}" title="{{ 
config.source.title }}">&lsaquo;&rsaquo;</a>
+  <a class="doc-source-link" href="{{ config.extra.source.repo }}/tree/{{ 
config.extra.source.tag }}/{{ module.relative_filepath }}" title="{{ 
config.extra.source.title }}">&lsaquo;&rsaquo;</a>
   {{ super() }}
 {% endblock heading %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/__meta__.py 
new/markdown-3.10.1/markdown/__meta__.py
--- old/markdown-3.10/markdown/__meta__.py      2025-11-03 20:50:58.000000000 
+0100
+++ new/markdown-3.10.1/markdown/__meta__.py    2026-01-21 19:09:10.000000000 
+0100
@@ -28,7 +28,7 @@
 from __future__ import annotations
 
 
-__version_info__ = (3, 10, 0, 'final', 0)
+__version_info__ = (3, 10, 1, 'final', 0)
 
 
 def _get_version(version_info):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/abbr.py 
new/markdown-3.10.1/markdown/extensions/abbr.py
--- old/markdown-3.10/markdown/extensions/abbr.py       2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/abbr.py     2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/abbreviations
 # for documentation.
 
-# Original code Copyright 2007-2008 [Waylan Limberg](http://achinghead.com/)
+# Original code Copyright 2007-2008 [Waylan Limberg](https://github.com/waylan)
 # and [Seemant Kulleen](http://www.kulleen.org/)
 
 # All changes Copyright 2008-2014 The Python Markdown Project
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/attr_list.py 
new/markdown-3.10.1/markdown/extensions/attr_list.py
--- old/markdown-3.10/markdown/extensions/attr_list.py  2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/attr_list.py        2026-01-21 
19:09:10.000000000 +0100
@@ -8,7 +8,7 @@
 # See https://Python-Markdown.github.io/extensions/attr_list
 # for documentation.
 
-# Original code Copyright 2011 [Waylan Limberg](http://achinghead.com/).
+# Original code Copyright 2011 [Waylan Limberg](https://github.com/waylan).
 
 # All changes Copyright 2011-2014 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/codehilite.py 
new/markdown-3.10.1/markdown/extensions/codehilite.py
--- old/markdown-3.10/markdown/extensions/codehilite.py 2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/codehilite.py       2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/code_hilite
 # for documentation.
 
-# Original code Copyright 2006-2008 [Waylan Limberg](http://achinghead.com/).
+# Original code Copyright 2006-2008 [Waylan 
Limberg](https://github.com/waylan).
 
 # All changes Copyright 2008-2014 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/def_list.py 
new/markdown-3.10.1/markdown/extensions/def_list.py
--- old/markdown-3.10/markdown/extensions/def_list.py   2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/def_list.py 2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/definition_lists
 # for documentation.
 
-# Original code Copyright 2008 [Waylan Limberg](http://achinghead.com)
+# Original code Copyright 2008 [Waylan Limberg](https://github.com/waylan)
 
 # All changes Copyright 2008-2014 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/fenced_code.py 
new/markdown-3.10.1/markdown/extensions/fenced_code.py
--- old/markdown-3.10/markdown/extensions/fenced_code.py        2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/fenced_code.py      2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/fenced_code_blocks
 # for documentation.
 
-# Original code Copyright 2007-2008 [Waylan Limberg](http://achinghead.com/).
+# Original code Copyright 2007-2008 [Waylan 
Limberg](https://github.com/waylan).
 
 # All changes Copyright 2008-2014 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/meta.py 
new/markdown-3.10.1/markdown/extensions/meta.py
--- old/markdown-3.10/markdown/extensions/meta.py       2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/meta.py     2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/meta_data
 # for documentation.
 
-# Original code Copyright 2007-2008 [Waylan Limberg](http://achinghead.com).
+# Original code Copyright 2007-2008 [Waylan 
Limberg](https://github.com/waylan).
 
 # All changes Copyright 2008-2014 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/sane_lists.py 
new/markdown-3.10.1/markdown/extensions/sane_lists.py
--- old/markdown-3.10/markdown/extensions/sane_lists.py 2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/sane_lists.py       2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/sane_lists
 # for documentation.
 
-# Original code Copyright 2011 [Waylan Limberg](http://achinghead.com)
+# Original code Copyright 2011 [Waylan Limberg](https://github.com/waylan)
 
 # All changes Copyright 2011-2014 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/tables.py 
new/markdown-3.10.1/markdown/extensions/tables.py
--- old/markdown-3.10/markdown/extensions/tables.py     2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/tables.py   2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/tables
 # for documentation.
 
-# Original code Copyright 2009 [Waylan Limberg](http://achinghead.com)
+# Original code Copyright 2009 [Waylan Limberg](https://github.com/waylan)
 
 # All changes Copyright 2008-2014 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/extensions/wikilinks.py 
new/markdown-3.10.1/markdown/extensions/wikilinks.py
--- old/markdown-3.10/markdown/extensions/wikilinks.py  2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/extensions/wikilinks.py        2026-01-21 
19:09:10.000000000 +0100
@@ -6,7 +6,7 @@
 # See https://Python-Markdown.github.io/extensions/wikilinks
 # for documentation.
 
-# Original code Copyright [Waylan Limberg](http://achinghead.com/).
+# Original code Copyright [Waylan Limberg](https://github.com/waylan).
 
 # All changes Copyright The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/htmlparser.py 
new/markdown-3.10.1/markdown/htmlparser.py
--- old/markdown-3.10/markdown/htmlparser.py    2025-11-03 20:50:58.000000000 
+0100
+++ new/markdown-3.10.1/markdown/htmlparser.py  2026-01-21 19:09:10.000000000 
+0100
@@ -111,6 +111,7 @@
         self.lineno_start_cache = [0]
 
         self.override_comment_update = False
+        self.override_comment_start = 0
 
         # This calls self.reset
         super().__init__(*args, **kwargs)
@@ -124,6 +125,8 @@
         self._cache: list[str] = []
         self.cleandoc: list[str] = []
         self.lineno_start_cache = [0]
+        self.override_comment_start = 0
+        self.override_comment_update = False
 
         super().reset()
 
@@ -273,9 +276,11 @@
 
     def handle_comment(self, data: str):
         # Check if the comment is unclosed, if so, we need to override position
-        i = self.line_offset + self.offset + len(data) + 4
-        if self.rawdata[i:i + 3] != '-->':
+        j = len(self.rawdata) - len(data)
+        i = j - 2
+        if self.rawdata[i:j] == '</':
             self.handle_data('<')
+            self.override_comment_start = i
             self.override_comment_update = True
             return
         self.handle_empty_tag('<!--{}-->'.format(data), is_block=True)
@@ -283,8 +288,8 @@
     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):
@@ -305,21 +310,19 @@
         self.handle_data('<?')
         return i + 2
 
-    if not hasattr(htmlparser, 'commentabruptclose'):
-        # Internal -- parse comment, return length or -1 if not terminated
-        # see 
https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state
-        def parse_comment(self, i, report=True):
-            rawdata = self.rawdata
-            assert rawdata.startswith('<!--', i), 'unexpected call to 
parse_comment()'
-            match = commentclose.search(rawdata, i+4)
-            if not match:
-                match = commentabruptclose.match(rawdata, i+4)
-                if not match:
-                    return -1
-            if report:
-                j = match.start()
-                self.handle_comment(rawdata[i+4: j])
-            return match.end()
+    # Internal -- parse comment, return length or -1 if not terminated
+    # see 
https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state
+    def parse_comment(self, i, report=True):
+        rawdata = self.rawdata
+        assert rawdata.startswith('<!--', i), 'unexpected call to 
parse_comment()'
+        match = commentclose.search(rawdata, i+4)
+        if not match:
+            self.handle_data('<')
+            return i + 1
+        if report:
+            j = match.start()
+            self.handle_comment(rawdata[i+4: j])
+        return match.end()
 
     def parse_html_declaration(self, i: int) -> int:
         if self.at_line_start() or self.intail:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/markdown/inlinepatterns.py 
new/markdown-3.10.1/markdown/inlinepatterns.py
--- old/markdown-3.10/markdown/inlinepatterns.py        2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/markdown/inlinepatterns.py      2026-01-21 
19:09:10.000000000 +0100
@@ -520,7 +520,8 @@
             value = stash.get(id)
             if value is not None:
                 try:
-                    return self.md.serializer(value)
+                    # Ensure we don't have a placeholder inside a placeholder
+                    return self.unescape(self.md.serializer(value))
                 except Exception:
                     return r'\%s' % value
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/mkdocs.yml 
new/markdown-3.10.1/mkdocs.yml
--- old/markdown-3.10/mkdocs.yml        2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/mkdocs.yml      2026-01-21 19:09:10.000000000 +0100
@@ -81,7 +81,7 @@
     custom_templates: docs/templates
     handlers:
       python:
-        import:
+        inventories:
         - https://docs.python.org/3/objects.inv
         options:
           annotations_path: brief
@@ -113,7 +113,8 @@
           show_symbol_type_toc: false
           signature_crossrefs: false
           summary: true
-          source:
-            repo: https://github.com/Python-Markdown/markdown
-            tag: !!python/name:markdown.__version__
-            title: "View source code on GitHub."
+          extra:
+            source:
+              repo: https://github.com/Python-Markdown/markdown
+              tag: !!python/name:markdown.__version__
+              title: "View source code on GitHub."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/markdown-3.10/pyproject.toml 
new/markdown-3.10.1/pyproject.toml
--- old/markdown-3.10/pyproject.toml    2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/pyproject.toml  2026-01-21 19:09:10.000000000 +0100
@@ -53,7 +53,7 @@
     'mkdocs>=1.6',
     'mkdocs-nature>=0.6',
     'mdx_gh_links>=0.2',
-    "mkdocstrings[python]",
+    "mkdocstrings[python]>=0.28.3",
     "mkdocs-gen-files",
     "mkdocs-section-index",
     "mkdocs-literate-nav",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/markdown-3.10/tests/test_syntax/blocks/test_html_blocks.py 
new/markdown-3.10.1/tests/test_syntax/blocks/test_html_blocks.py
--- old/markdown-3.10/tests/test_syntax/blocks/test_html_blocks.py      
2025-11-03 20:50:58.000000000 +0100
+++ new/markdown-3.10.1/tests/test_syntax/blocks/test_html_blocks.py    
2026-01-21 19:09:10.000000000 +0100
@@ -1684,3 +1684,25 @@
                 """
             )
         )
+
+    def test_multiple_bogus_comments_no_hang(self):
+        """Test that multiple bogus comments (</` patterns) don't cause 
infinite loop."""
+        self.assertMarkdownRenders(
+            '`</` and `</`',
+            '<p><code>&lt;/</code> and <code>&lt;/</code></p>'
+        )
+
+    def test_multiple_unclosed_comments_no_hang(self):
+        """Test that multiple unclosed comments don't cause infinite loop."""
+        self.assertMarkdownRenders(
+            '<!-- and <!--',
+            '<p>&lt;!-- and &lt;!--</p>'
+        )
+
+    def test_no_hang_issue_1586(self):
+        """Test no hang condition for issue #1586."""
+
+        self.assertMarkdownRenders(
+            'Test `<!--[if mso]>` and `<!--[if !mso]>`',
+            '<p>Test <code>&lt;!--[if mso]&gt;</code> and <code>&lt;!--[if 
!mso]&gt;</code></p>'
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/markdown-3.10/tests/test_syntax/inline/test_raw_html.py 
new/markdown-3.10.1/tests/test_syntax/inline/test_raw_html.py
--- old/markdown-3.10/tests/test_syntax/inline/test_raw_html.py 2025-11-03 
20:50:58.000000000 +0100
+++ new/markdown-3.10.1/tests/test_syntax/inline/test_raw_html.py       
2026-01-21 19:09:10.000000000 +0100
@@ -34,3 +34,9 @@
 
     def test_noname_tag(self):
         self.assertMarkdownRenders('<span></></span>', 
'<p><span>&lt;/&gt;</span></p>')
+
+    def test_markdown_nested_in_inline_comment(self):
+        self.assertMarkdownRenders(
+            'Example: <!-- [**Bold link**](http://example.com) -->',
+            '<p>Example: <!-- <a href="http://example.com";><strong>Bold 
link</strong></a> --></p>'
+        )

Reply via email to