Files
fpc-msgbase/CHANGELOG.md
Ken Johnson 02a665d69b Bump to 0.5.2 (mb.kludge FTS-conformance fixes)
Rolls up two consumer-surfaced interop fixes that landed earlier
today (cd2cc90 FLAGS space-separator, ee0f1ca AREA: envelope
recognition) into a tagged release so NR can stabilise its pin.

Both caught by NetReader's hpt-vs-nr byte-diff harness.  See
CHANGELOG.md for the full writeup.

No API change.  Pure behaviour fix.
2026-04-19 19:05:14 -07:00

4.6 KiB

Changelog

All notable changes to fpc-msgbase are recorded here. Every release tag (vX.Y.Z) points at the commit that bumped MB_VERSION in src/mb.version.pas. Downstream consumers should pin by tag, not commit hash.

Semver intent:

  • major — breaks callers (API removal, signature change, record shape)
  • minor — additive features, new backend keys, new exported helpers
  • patch — bug fixes, security hardening, internal perf

Tags below the 0.5 line were placed retroactively on 2026-04-19. The corresponding commit messages carry the canonical release notes; this file is a quick index.

0.5.2 -- 2026-04-19 (FTS-conformance fixes from NR hpt-compare suite)

Two consumer-surfaced interop bugs in mb.kludge, both caught by NetReader's hpt-vs-nr byte-diff harness. Real-world impact: previous BuildKludgePrefix output failed to round-trip through HPT / fmail / NR for FLAGS kludges, and previous SplitKludgeBlob leaked the FTS-0004 AREA: envelope into on-disk bodies.

  • BuildKludgePrefix FLAGS emission used a colon separator (^AFLAGS: DIR), but FTS-4001 §4 specifies a space (^AFLAGS DIR) and every downstream parser (NR's ParseKludges, HPT's getFlags, fmail's getKludge) expects no colon. Symptom: FLAGS DIR / IMM routing silently fell through to normal routing because consumers didn't recognise the kludge at all. Fix: one-line drop of the colon from the emit template. MSGID: / REPLY: / PID: / CHRS: / TZUTC: keep their colons per their respective specs. Commit: cd2cc90.
  • ParseKludgeLine AREA: recognition. FTS-0004 puts AREA:<tag> at the head of a packet-message body with no SOH prefix, same shape as the SEEN-BY: / PATH: trailing control lines the parser already handled. Without AREA: in the trail- control list, SplitKludgeBlob left the envelope in PlainBody, so msgbase writers stored AREA:BINECHO as the first ~12 bytes of the on-disk message body. Symptom (NR): UUE decode output inflated by the envelope length per section. Fix: add AREA: to the isTrailControl list and dispatch 'area': into A.SetValue('area', ...) -- same attribute slot 0.5.0 already populates from MessageBaseOpen's area-tag argument on reads. Commit: ee0f1ca.

Thanks to NR for catching both via the hpt-compare harness.

0.5.1 -- 2026-04-19 (security-hardening round)

Retroactive tagging discipline established. Before this release, consumers were pinning commit hashes because no tags existed.

  • Hardened parsers against crafted message-base files (JAM, Squish, Wildcat, *.MSG). Wildcat ReadBody no longer allows an attacker-controlled MsgBytes to drive a heap OOB read. Squish rejects clen > msg_length frames (bodyLen underflow) and caps ReIndex chain walks. JAM caps SubfieldLen / TxtLen at 64 MiB. mb.kludge.SplitKludgeBlob went from O(n^2) to O(n) with a 10 K line cap; *.MSG.ReadBody caps at 16 MiB.
  • mb.lock uses O_NOFOLLOW on POSIX -- symlink-swap on the sentinel can no longer redirect the lock handle.
  • New mb.paths.IsSafePathComponent / EnforceSafePathComponent for callers composing paths from attacker-derived tails.
  • Corruption-resilience fuzz suite added at tests/adversarial/ -- 26 cases across JAM / Squish / Hudson / GoldBase / PCBoard / *.MSG / mb.kludge. Graceful-degradation invariant enforced.
  • wc_sdk audit: added cycle cap on vrec.IsamDeleteVariableRec and a src/wc_sdk/SECURITY.md documenting the vendored-code threat model and residual risks.
  • Squish Replies[] exposed via squish.reply1st (scalar) + squish.replynext (list). NR's linker can now round-trip the Squish reply chain through mb.api.

Commits: 180ca95, 94dcd27, a740955, 9176b64.

0.5.0 -- pre-tag (84e2efd)

  • TMessageBase.Sync for crash-safe per-message acknowledgement.
  • Sparse-file fix for Hudson / GoldBase HWM extension.
  • ma.* -> mb.* namespace rename (breaking, cosmetic).
  • metCommitComplete / metRollbackComplete event types.

0.4.0 -- pre-tag (6b225fe)

  • Breaking: PKT moves to sibling fpc-ftn-transport library (PKT is a wire format, not a storage format). mbfPkt factory enum remains; consumers add uses tt.pkt.reader.

0.3.5 -- pre-tag (e876d98)

  • mb.kludge shared helper, INTL / FMPT / TOPT support, area auto-population, list attribute helpers, PKT polish.

0.3.3 -- pre-tag (850cc65)

  • HWM for Hudson + GoldBase + Board context.

0.3.2 -- pre-tag (20cd593)

  • HWM documentation + coverage map.

0.3.1 -- pre-tag (57a6c1d)

  • HWM for Squish (partial).

0.3.0 -- pre-tag (8ff70bb)

  • HWM API + JAM implementation.