fix: Avoid infinite loop when cross-reference keyspace is exhausted#334
fix: Avoid infinite loop when cross-reference keyspace is exhausted#334jonashaag wants to merge 1 commit into
Conversation
|
CI follow-up: the unrelated matrix failures are fixed in separate commits. Snapshot fixtures are checked out with LF on Windows; the docs inventory is only consumed by highest-resolution jobs; the global PyO3 ABI3 override was removed so current Pydantic builds on Python 3.15; and lowest-direct is limited to Python 3.10–3.13 because the minimum Pydantic stack cannot build on 3.14/3.15. The latest run is 31/31 green: https://github.com/mkdocstrings/python/actions/runs/29655904249 |
|
Thanks for the contribution @jonashaag. Can you please send the CI fixes in another PR? And can you also tell your agent to follow our PR template? |
f17308d to
ff042bb
Compare
|
Done, thanks. I split the unrelated CI fixes into #335 and updated this PR description to follow the repository template. |
For reviewers
Description of the change
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_keyretries random choices forever.This became reproducible for attribute values after 2.0.5 started rendering their source-level names: a large value containing more than 62 references through the same one-character module alias hangs the documentation build.
Detect an exhausted key length and expand subsequent keys by one character. Non-exhausted keyspaces retain the existing same-length behavior.
Validation:
Relevant resources