• docs/v322_new.md src/sbbs3/smbutil.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Tue Sep 15 20:47:46 2026
    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>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net