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