Skip to content

release 3.1.0 - #132

Merged
msimerson merged 5 commits into
lsongdev:masterfrom
NicTool:decode-errors
Jul 26, 2026
Merged

release 3.1.0#132
msimerson merged 5 commits into
lsongdev:masterfrom
NicTool:decode-errors

Conversation

@msimerson

@msimerson msimerson commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator
  • release 3.1.0
  • BREAKING: declare node 22 as the floor
  • feat(packet): Extended DNS Errors (RFC 8914) — Packet.EDE INFO-CODEs, an EDE EDNS option codec, and Packet.createErrorResponseFromRequest
  • feat(packet): Packet.RCODE completed from the IANA registry — 6-11 and 16-23
  • feat(ts): Packet.RCODE was missing from the type declarations
  • feat(packet): Packet.parse stops at a failure that leaves the reader misaligned
  • feat(packet): RDLENGTH bounds every rdata decoder, so a malformed record no longer cascades (RFC 1035 §4.1.3)
  • feat(packet): Packet.typeName, Packet.TYPE_NAME, Packet.EDNS_OPTION_NAME
  • feat(client/udp): a query timeout names the last dropped response and why
  • feat(index): resolve() uses Promise.any, so one dead NS no longer fails all
  • fix(packet): parse throws Packet.DecodeError for a message with no usable header
  • fix(packet): parse no longer swallows per-record decode failures, reports on packet.errors
  • fix(packet): encoding a record or question whose TYPE/CLASS is not a 16-bit int throws
  • fix(packet): encoding an A/AAAA record with an invalid address throws, was 0.0.0.0
  • fix(packet): RRSIG was unreachable — Packet.TYPE.RRSIG (46) was missing
  • fix(packet): RRSIG timestamps mixed the local-time year with UTC fields
  • fix(packet): RRSIG retains raw rdata so re-serializing keeps the signature
  • fix(packet): EDNS skipped unknown options by bits instead of octets
  • fix(packet): length validation for A, AAAA, CAA, DNSKEY, RRSIG and ECS rdata
  • fix(packet): Packet.readStream rejects a truncated message
  • fix: DNS option timeout is ms and now reaches the client (default 3000)
  • fix(index): resolveA(domain, clientIp) never sent the ECS option
  • fix(client/doh): a non-200 response rejected and then resolved
  • fix(packet): drop the Array.prototype.flatMap polyfill for Node 10

Fringe Benefit

Throughput is now ~23k req/s on benchmark/udp.js (from 14.1k)

This comment was marked as outdated.

This comment was marked as outdated.

- feat(packet): Packet.parse stops at a failure that leaves the reader misaligned
- feat(packet): RDLENGTH bounds every rdata decoder, so a malformed record no longer cascades (RFC 1035 §4.1.3)
- feat(packet): `Packet.typeName`, `Packet.TYPE_NAME`, `Packet.EDNS_OPTION_NAME`
- feat(client/udp): a query timeout names the last dropped response and why
- feat(index): `resolve()` uses `Promise.any`, so one dead NS no longer fails all
- fix(packet): parse throws `Packet.DecodeError` for a message with no usable header
- fix(packet): parse no longer swallows per-record decode failures, reports on `packet.errors`
- fix(packet): encoding a record or question whose TYPE/CLASS is not a 16-bit int throws
- fix(packet): encoding an A/AAAA record with an invalid address throws, was `0.0.0.0`
- fix(packet): RRSIG was unreachable — `Packet.TYPE.RRSIG` (46) was missing
- fix(packet): RRSIG timestamps mixed the local-time year with UTC fields
- fix(packet): RRSIG retains raw rdata so re-serializing keeps the signature
- fix(packet): EDNS skipped unknown options by bits instead of octets
- fix(packet): length validation for A, AAAA, CAA, DNSKEY, RRSIG and ECS rdata
- fix(packet): `Packet.readStream` rejects a truncated message
- fix: DNS option timeout is ms and now reaches the client (default `3000`)
- fix(index): `resolveA(domain, clientIp)` never sent the ECS option
- fix(client/doh): a non-200 response rejected and then resolved
- fix(packet): drop the `Array.prototype.flatMap` polyfill for Node 10
- declare node 22 as floor
- better error messages
- ts: update node10 to node16
- test: do not treat timed-out tests as passes
- fix: pipeline does not swallow extra bytes

This comment was marked as outdated.

@msimerson msimerson changed the title feat: report decode failures, + protocol improvements release 3.1.0 Jul 26, 2026
- feat(packet): Extended DNS Errors (RFC 8914) — `Packet.EDE` INFO-CODEs, an EDE EDNS option codec, and `Packet.createErrorResponseFromRequest`
- feat(packet): `Packet.RCODE` completed from the IANA registry — 6-11 and 16-23
- feat(ts): `Packet.RCODE` was missing from the type declarations entirely

This comment was marked as outdated.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 19 out of 21 changed files in this pull request and generated no new comments.

@msimerson
msimerson merged commit 0c442b2 into lsongdev:master Jul 26, 2026
5 checks passed
@msimerson
msimerson deleted the decode-errors branch July 26, 2026 20:18
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