From 6ff274911441ffaace47dd822fd92a3cdac84e65 Mon Sep 17 00:00:00 2001 From: Jonas Haag Date: Fri, 7 Aug 2026 14:32:06 +0200 Subject: [PATCH] fix: Increase stash key length from 1 to 2 Cross-reference stash keys start with `_` and preserve the rendered identifier length. One-character and two-character identifiers therefore share a keyspace of only 62 keys. Once all keys are present, `_gen_stash_key` retries random choices forever. This happens for example in mkdocstrings when rendering an attribute value that has 62 names in it or more. We increase the minimum key length by 1, to reach a keyspace of 3844, making it very unlikely to hit the limit again. PR-336: https://github.com/mkdocstrings/python/pull/336 --- src/mkdocstrings_handlers/python/_internal/rendering.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mkdocstrings_handlers/python/_internal/rendering.py b/src/mkdocstrings_handlers/python/_internal/rendering.py index d5ffc8e..e9efb53 100644 --- a/src/mkdocstrings_handlers/python/_internal/rendering.py +++ b/src/mkdocstrings_handlers/python/_internal/rendering.py @@ -107,7 +107,7 @@ class _StashCrossRefFilter: @staticmethod def _gen_key(length: int) -> str: - return "_" + "".join(random.choice(string.ascii_letters + string.digits) for _ in range(max(1, length - 1))) # noqa: S311 + return "_" + "".join(random.choice(string.ascii_letters + string.digits) for _ in range(max(2, length - 1))) # noqa: S311 def _gen_stash_key(self, length: int) -> str: key = self._gen_key(length)