Skip to content

fix: ensure TO_STRING conversion functions do not panic (1.0.x) - #1905

Merged
ghaith merged 4 commits into
release/1.0.xfrom
rusty-backport-4692
Sep 16, 2026
Merged

ghaith merged 4 commits into
release/1.0.xfrom
rusty-backport-4692

Conversation

@ghaith

@ghaith ghaith commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Problem: The *_TO_STRING conversions cover only a few widths, format the short date and time types without their literal prefixes, and can panic on unexpected input or overflow their result buffers.

Solution: Move the TO_STRING and STRING_TO declarations into dedicated standard library files, add the missing BOOL, integer and bit-string conversions with well defined result lengths, and format date and time values with their literal prefixes through one panic-free writer. Lengths are sized for the 64-bit nanosecond types used on this release line.

Backport of #1903. Depends on #1904.

Refs: PRG-4692

🤖 Generated with Claude Code

@ghaith
ghaith force-pushed the rusty-backport-4659 branch from bb803fb to 0cac305 Compare September 8, 2026 13:53
@ghaith
ghaith force-pushed the rusty-backport-4692 branch from 3ec06b1 to d89de38 Compare September 10, 2026 09:21
volsa
volsa previously approved these changes Sep 14, 2026
Base automatically changed from rusty-backport-4659 to release/1.0.x September 14, 2026 08:56
@ghaith
ghaith dismissed volsa’s stale review September 14, 2026 08:56

The base branch was changed.

ghaith and others added 3 commits September 15, 2026 11:13
Problem: The *_TO_STRING conversions cover only a few widths, format the
short date and time types without their literal prefixes, and can panic
on unexpected input or overflow their result buffers.

Solution: Move the TO_STRING and STRING_TO declarations into dedicated
standard library files, add the missing BOOL, integer and bit-string
conversions with well defined result lengths, and format date and time
values with their literal prefixes through one panic-free writer. Lengths
are sized for the 64-bit nanosecond types used on this release line.

Backport of #1903.

Refs: PRG-4692

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…(1.0.x)

Problem: The TO_STRING writers formatted through a 2047-byte slice built over the destination pointer, so a caller that hands LREAL_TO_STRING_EXT a shorter STRING lends out memory it does not own, and the REAL, LREAL and 64-bit-only date and time conversions still assumed a STRING[2048] result. The declared lengths were also hidden behind global constants that editor hovers do not resolve.

Solution: Format through a writer that copies at most the declared result length behind the pointer, give the REAL, LREAL, LDT, LDATE and LTOD conversions exact result lengths, and spell every result length as a literal in the declaration.
Problem: LDT_TO_STRING and LDATE_TO_STRING returned bare ISO text while every other date and time conversion carries the literal prefix of its type.

Solution: Emit the LDT# and LDATE# prefixes and size the declared results for them.
@ghaith
ghaith force-pushed the rusty-backport-4692 branch from d89de38 to fb855e9 Compare September 15, 2026 11:22
@github-actions

github-actions Bot commented Sep 15, 2026

Copy link
Copy Markdown

Build Artifacts

🐧 Linux

Artifact Link Size
plc-x86_64 Download 43.5 MB
schema Download 0.0 MB
deb-aarch64 Download 30.9 MB
plc-aarch64 Download 43.3 MB
stdlib Download 33.5 MB
deb-x86_64 Download 38.7 MB

From workflow run

🪟 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

@ghaith
ghaith merged commit d945095 into release/1.0.x Sep 16, 2026
23 checks passed
@ghaith
ghaith deleted the rusty-backport-4692 branch September 16, 2026 06:29
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.

2 participants