https://gitlab.synchro.net/main/sbbs/-/commit/aee485f478d18bf1aa97cb59
Modified Files:
docs/v322_new.md src/sbbs3/smbutil.c
Log Message:
smbutil: make pack error-safe
packmsgs() renames the live .shd/.sdt/.sid aside before building their replacements, and three failure paths afterwards took a bare return with
no message at all. A single unreadable message therefore left the base
with no .shd, which a message server then treats as a base to create from scratch.
Log those failures with the offending message number, skip a message
whose data cannot be read rather than abandoning the pack, and restore
the originals on any failure after the rename. The allocation tables are
moved aside rather than truncated in place so that rollback is complete: against an emptied .sda, the next message written would land on top of
live data. The replacements are flushed and checked before the swap, so a
full disk no longer installs a truncated base, and the swap is now the
last thing done rather than interleaved with the removals.
Also stop discarding messages whose data exceeds 16MB. That limit was
arbitrary and dropped the message from the base rather than leaving it uncompacted; the bound is now the format's own SMB_MAX_DAT_LEN.
issue #1171
Co-Authored-By: Claude Opus 5 (1M context) <
noreply@anthropic.com>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)