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

    From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Wed Sep 30 16:22:28 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/04dfc61739938207f3f302df
    Modified Files:
    docs/v322_new.md src/sbbs3/sbbsecho.c
    Log Message:
    SBBSecho: don't write a stored-message header into an inbound packet

    import_netmail() marks a netmail message as received by writing its stored-message (*.msg) header back to the file it was read from. Since e7b93ae3f3 (types-26-ease, 2025-11-01) that write-back ran for packets
    too: update_fmsghdr() seeks to offset 0 and writes the 190-byte fmsghdr_t, which lands on the packet header and the first message. Any message that followed the imported netmail in the same packet was then read through the overwritten bytes (its type word became 256, from the destzone/origzone
    bytes of the stored header), reported as "Grunged message", and the packet
    was set aside as bad, losing the rest of its netmail and echomail. Before
    that commit the write-back was conditional on a *.msg path.

    Only write the header back for a *.msg file, at both of the sites that
    were made unconditional. The robot (uses_msg) site already branched on it.

    Reproduced with a hand-built Type-2+ packet carrying two netmail messages:
    the second was grunged at offset 177 with type 256 before the fix, and both import cleanly after it. Shipped in SBBSecho 3.37 with v3.21c and v3.21e.

    Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
    --- SBBSecho 3.38-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Thu Oct 1 15:27:18 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/8a99194387a88c85b801de3d
    Modified Files:
    docs/v322_new.md src/sbbs3/sbbsecho.c
    Log Message:
    sbbsecho: don't cut UTF-8 header fields mid-character on export

    FTS-0001 packed-message headers hold 35 bytes of To/From and 71 bytes of Subject. SMB header fields are unbounded, so export truncates them, and it
    did so by byte count: a UTF-8 field over the limit (e.g. a Cyrillic name,
    2 bytes per letter) could end in a partial multi-byte sequence, which
    readers show as a replacement character.

    Echomail export and create_netmail() now copy these fields with
    utf8_strlcpy() when the message's header fields are UTF-8 and valid, so the
    cut falls on a character boundary. On ASCII-only (SUB_ASCII) sub-boards
    the field is converted from UTF-8 to CP437/ASCII before truncation rather
    than after, so it no longer converts an already-split sequence and keeps
    up to twice as many characters.

    Fixes #1276

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    --- SBBSecho 3.38-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)