Skip to content

Bound the language-name copy in LANG_LOAD#66

Merged
xroche merged 2 commits into
masterfrom
fix-langload-unbounded-copy
Jul 26, 2026
Merged

Bound the language-name copy in LANG_LOAD#66
xroche merged 2 commits into
masterfrom
fix-langload-unbounded-copy

Conversation

@xroche

@xroche xroche commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Callers pass a 1024-byte buffer, and a lang.def name value can be longer, so a long enough entry overflowed the caller stack. The copy looked bounds-checked but was not; the reason is in the comment at the call.

The capacity now comes from the caller and the copy goes through lstrcpynA, which always terminates. Truncation rather than an abort, since this is a display name; an empty name still stays empty, so the enumeration terminator #64 restored is unaffected.

Pre-existing, and found by an adversarial reviewer on #64.

xroche and others added 2 commits July 26, 2026 10:31
limit_to is a bare char*, and the buff() macros only carry a bound when the
destination is a sized array: for a pointer they silently degrade to plain
strcpy. Callers pass a 1024-byte buffer while a lang.def name value can be far
longer, so a long enough entry overflowed the caller's stack.

Take the capacity from the caller and truncate with lstrcpynA, which always
terminates. Truncation rather than an abort, since this is a display name, and
an empty name stays empty so the enumeration terminator is unaffected.

Pre-existing; the copy was unbounded before the placeholder was ever added.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HXNEMWtyrkW7xoD8ewcR3
Signed-off-by: Xavier Roche <roche@httrack.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HXNEMWtyrkW7xoD8ewcR3
Signed-off-by: Xavier Roche <roche@httrack.com>
@xroche
xroche merged commit b548534 into master Jul 26, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant