Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Added missing window, GDI, memory, text and multibyte behavior in the host that the own guest components need.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Bounded the resource directory by the image size instead of 16 MiB, so an installer carrying a large payload keeps its declared Windows version.
LCMapStringW and LCMapStringEx wrote a zero after the mapped text even when
the source was given with its length, one character past a buffer sized
exactly from the first call. CPython's ntpath.normcase sizes its buffer that
way, so the heap after it was overwritten; for some path lengths the next
allocation crashed (CPython started through uv's version links stopped at
its first import). A NUL-terminated source (length -1) now counts and writes
its zero, and a buffer without room for it fails with
ERROR_INSUFFICIENT_BUFFER instead of being written past; LCMapStringA
counts and writes the zero of a terminated source as well, and the three
share the case mapping. uv init, uv venv and uv pip work.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the LCMapString length handling
(cherry picked from commit 358853d4b9a8c500a6724542cbab3ccd9895b7a5)
A standard handle that is a terminal, and CONIN$, CONOUT$ and CON, now act as a console: modes map to terminal settings,
reads and writes convert between UTF-16 and the terminal's UTF-8, terminal input becomes key events, and Ctrl+C runs the
control handlers. Files and pipes still fail the console functions, as on Windows.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the console functions over the terminal, their pty test and the guest test program from the public console API documentation.