templates: {s} with one string hole and nothing else is a new string, not s itself - it was the one template that passed its string through (string() does), and code that wrote it as a copy kept what it then freed; the mark rides the callee, since escape analysis writes the call's uns; reseeded

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-29 20:14:58 +03:00
parent a436cfbe35
commit dd25267502
6 changed files with 29922 additions and 29729 deletions

6
changes/template-copy.md Normal file
View file

@ -0,0 +1,6 @@
bump: patch
type: fix
**A template of one string hole is a new string.** `` `{s}` `` was `s` itself (`str()` passes a string
through), so code that wrote it as a copy kept a pointer it then freed - ludic.ui's rule text named
whatever reused the bytes. It now copies, where a template with any other part already made a new
string; `str(s)` still passes through. No template in the game or the packages had a string as its lone hole.