Skip to content

fix(stdlib): string writers terminate their own output - #1817

Open
ghaith wants to merge 2 commits into
masterfrom
fix/stdlib-string-writers-terminate
Open

fix(stdlib): string writers terminate their own output#1817
ghaith wants to merge 2 commits into
masterfrom
fix/stdlib-string-writers-terminate

Conversation

@ghaith

@ghaith ghaith commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Problem

The stdlib string writers assume the caller hands them a zero-filled result buffer: the formatted *_TO_STRING_EXT conversions write their content without a trailing terminator, TIME_TO_STRING_EXT even locates its write position by scanning for the first zero byte, and STRING_TO_WSTRING_EXT, CHAR_TO_STRING and WCHAR_TO_WSTRING leave the terminator to the pre-zeroed buffer. Any caller that hands over a dirty buffer gets unterminated or corrupted results.

Fix

Every writer now terminates its own output. The formatted conversions go through a cursor-tracking write_terminated helper that appends the terminator after the written content; TIME_TO_STRING_EXT tracks its write offset instead of scanning for zero bytes and terminates up front so a zero duration yields an empty string.

Testing

New unit tests call every affected writer on a 0xAA-filled buffer and assert the result reads back correctly up to its terminator.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown

Build Artifacts

🪟 Windows

Artifact Link Size
stdlib.lib Download 4.0 MB
stdlib.dll Download 0.1 MB
plc.exe Download 38.3 MB

From workflow run

🐧 Linux

Artifact Link Size
deb-x86_64 Download 38.4 MB
schema Download 0.0 MB
stdlib Download 32.4 MB
plc-x86_64 Download 43.4 MB
deb-aarch64 Download 30.8 MB
plc-aarch64 Download 43.3 MB

From workflow run

The *_TO_STRING writers relied on the caller zero-filling the whole
result buffer: they wrote content without a trailing terminator, and
TIME_TO_STRING_EXT even located its write position by scanning for the
first zero byte. STRING_TO_WSTRING_EXT, CHAR_TO_STRING and
WCHAR_TO_WSTRING had the same gap; the string_functions writers already
terminate through the encoders.

Every writer now terminates what it writes (via a cursor-tracking
write_terminated helper for the formatted conversions), so results stay
well-formed regardless of the destination buffer's prior contents.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ghaith
ghaith force-pushed the fix/stdlib-string-writers-terminate branch from 6dab235 to 6d4efe1 Compare July 21, 2026 11:39
Port the terminated-write fix onto the TIME/LTIME split introduced by #1801:
the write_time/dt/date/tod_to_string helpers now use write_terminated, and the
regression test drives the L-variant entry points.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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