Skip to content

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

Open
ghaith wants to merge 3 commits into
rusty-backport-4659from
rusty-backport-4692
Open

fix: ensure TO_STRING conversion functions do not panic (1.0.x)#1905
ghaith wants to merge 3 commits into
rusty-backport-4659from
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 and others added 3 commits September 10, 2026 07:43
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 3ec06b1 to d89de38 Compare September 10, 2026 09:21
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