Skip to content

Add ErrWrongType, keep characters whole in quoted input - #7

Merged
pscheid92 merged 3 commits into
mainfrom
errors-utf8-and-wrong-type
Nov 9, 2026
Merged

pscheid92 merged 3 commits into
mainfrom
errors-utf8-and-wrong-type

Conversation

@pscheid92

Copy link
Copy Markdown
Owner

Findings 10 and 11 of the full review, in one pull request because both change errors.go.

  • ErrWrongType (new API). A JSON value of the wrong type, such as a number for ISO8601 or a string for Sec,
    was the only cause of an invalid duration without a sentinel. Its error now matches ErrWrongType, next to
    ErrInvalidDuration. The message stays "want a JSON string", "number" or "string or number".
  • Quoted input. An error quotes at most 64 bytes of a bad input and cut there even inside a UTF-8 character, which
    put a replacement character into the message. The cut now moves back, by at most three bytes, to the start of the
    character. Text that is not UTF-8 is cut at 64 bytes as before.

Tests cover characters of 2, 3 and 4 bytes at every position around the cut. Coverage stays at 100%.

A JSON value of the wrong type, such as a number for ISO8601, was the
only cause of an invalid duration that a caller could not test for: it
had a message, "want a JSON string", but no sentinel. Its error now
matches ErrWrongType. The message is unchanged.

An error quotes at most 64 bytes of a bad input, and cut there even in
the middle of a UTF-8 character, so the message ended in a replacement
character that the input never held. The cut now moves back to the
start of that character.
@pscheid92
pscheid92 merged commit c1a5ec0 into main Nov 9, 2026
19 checks passed
@pscheid92
pscheid92 deleted the errors-utf8-and-wrong-type branch November 9, 2026 20:49
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