Skip to content

fix!: TXT decode preserves string-boundary info#125

Merged
msimerson merged 1 commit into
lsongdev:masterfrom
NicTool:h6-txt-as-array
May 26, 2026
Merged

fix!: TXT decode preserves string-boundary info#125
msimerson merged 1 commit into
lsongdev:masterfrom
NicTool:h6-txt-as-array

Conversation

@msimerson
Copy link
Copy Markdown
Collaborator

@msimerson msimerson commented May 26, 2026

BREAKING

RFC 1035 §3.3.14

A TXT RDATA can contain multiple <character-string> items, each length-prefixed. Packet.Resource.TXT.decode (packet.js:618–633) concatenates all strings into a single this.data value, discarding the boundaries. Applications that rely on multi-string TXT records (SPF, DKIM) will receive incorrect data.

The encoder handles arrays correctly; the asymmetry means decode→encode is lossy.

PS: it was back around node.js 0.11 or so when c-ares had this exact same issue, and had to resolve it this same way. It affected us over in Haraka, a SMTP daemon, where we consume a lot of SPF and DKIM records.

@msimerson msimerson force-pushed the h6-txt-as-array branch 2 times, most recently from 808d158 to 7c07f35 Compare May 26, 2026 03:21
@lsongdev lsongdev marked this pull request as ready for review May 26, 2026 13:33
@msimerson msimerson force-pushed the h6-txt-as-array branch 2 times, most recently from 61a50c5 to 20d47e2 Compare May 26, 2026 19:31
@msimerson msimerson requested a review from Copilot May 26, 2026 19:32
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes lossy decoding of TXT/SPF records by preserving RFC 1035 §3.3.14 <character-string> boundaries on decode (so multi-string TXT records like SPF/DKIM round-trip correctly), and updates the project’s public behavior to return TXT data as an array consistently.

Changes:

  • Update Packet.Resource.TXT.decode (and SPF alias) to return data as an array of strings, preserving per-string boundaries.
  • Update server/packet tests to assert TXT data as string[] (including a new boundary-preservation test).
  • Mark the change as breaking via a major version bump to 3.0.0 and a changelog entry.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packet.js Changes TXT/SPF decode to preserve <character-string> boundaries by producing an array of strings.
test/packet.js Updates TXT-related assertions and adds a test ensuring multi-string TXT boundaries are preserved.
test/server.js Updates end-to-end expectations so TXT answers return data as string[].
package.json Bumps package version to 3.0.0 to reflect the breaking API change.
CHANGELOG.md Documents the breaking TXT data shape change and the decode fix.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packet.js Outdated
Comment thread packet.js Outdated
Comment thread package.json
@msimerson msimerson changed the title fix: TXT decode preserves string-boundary info fix!: TXT decode preserves string-boundary info May 26, 2026
@msimerson msimerson merged commit 6ab05ff into lsongdev:master May 26, 2026
5 checks passed
@msimerson msimerson deleted the h6-txt-as-array branch May 26, 2026 19:44
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