• src/sbbs3/chksmb.c fixsmb.c smbutil.c src/smblib/smblib.c smblib.h

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Tue Sep 29 19:00:50 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/343738828ef6d998fea6a281
    Modified Files:
    src/sbbs3/chksmb.c fixsmb.c smbutil.c src/smblib/smblib.c smblib.h
    Log Message:
    fixsmb/chksmb/smbutil: don't skip headers after a corrupt one

    fixsmb, chksmb and the analysis pass of smbutil pack step from one header
    to the next by the header's calculated length (the sum of its fields).
    When a header is damaged so that its fields add up to more than its stored length (a field length overwritten, or its tail zeroed), that step jumps
    over the headers that follow: fixsmb leaves them out of the index it
    rebuilds, and chksmb neither counts them nor reports them as orphaned.

    New smb_msghdrblocks() returns the blocks a header occupies for this
    purpose: the lesser of its stored and calculated lengths, and at least one block. The two differ only for a damaged header; a header is rewritten in
    place only when its new length fits in the blocks it already has.

    fixsmb also treated a live header as a duplicate, and left it out of the
    index, when a deleted header with the same message number came before it.
    That is the normal state of a header that grew and was relocated (the old
    copy is marked deleted), so such messages were dropped from the rebuilt
    index. Deleted headers no longer count toward duplicate numbers, unless -undelete is given.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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