Rolls up two consumer-surfaced interop fixes that landed earlier today (cd2cc90FLAGS space-separator,ee0f1caAREA: 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.
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.
BuildKludgePrefixFLAGS 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.ParseKludgeLineAREA: recognition. FTS-0004 putsAREA:<tag>at the head of a packet-message body with no SOH prefix, same shape as theSEEN-BY:/PATH:trailing control lines the parser already handled. Without AREA: in the trail- control list,SplitKludgeBlobleft the envelope in PlainBody, so msgbase writers storedAREA:BINECHOas the first ~12 bytes of the on-disk message body. Symptom (NR): UUE decode output inflated by the envelope length per section. Fix: addAREA:to the isTrailControl list and dispatch'area':intoA.SetValue('area', ...)-- same attribute slot 0.5.0 already populates fromMessageBaseOpen'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
ReadBodyno longer allows an attacker-controlledMsgBytesto drive a heap OOB read. Squish rejectsclen > msg_lengthframes (bodyLen underflow) and capsReIndexchain walks. JAM capsSubfieldLen/TxtLenat 64 MiB.mb.kludge.SplitKludgeBlobwent from O(n^2) to O(n) with a 10 K line cap;*.MSG.ReadBodycaps at 16 MiB. mb.lockuses O_NOFOLLOW on POSIX -- symlink-swap on the sentinel can no longer redirect the lock handle.- New
mb.paths.IsSafePathComponent/EnforceSafePathComponentfor 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.IsamDeleteVariableRecand asrc/wc_sdk/SECURITY.mddocumenting 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 throughmb.api.
Commits: 180ca95, 94dcd27, a740955, 9176b64.
0.5.0 -- pre-tag (84e2efd)
TMessageBase.Syncfor crash-safe per-message acknowledgement.- Sparse-file fix for Hudson / GoldBase HWM extension.
ma.*->mb.*namespace rename (breaking, cosmetic).metCommitComplete/metRollbackCompleteevent types.
0.4.0 -- pre-tag (6b225fe)
- Breaking: PKT moves to sibling
fpc-ftn-transportlibrary (PKT is a wire format, not a storage format).mbfPktfactory enum remains; consumers adduses tt.pkt.reader.
0.3.5 -- pre-tag (e876d98)
mb.kludgeshared 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.