• src/ssh/ssh-trans.c src/ssh/test/dssh_test_internal.h test_algo_key.c

    From Deucе@VERT to Git commit to main/sbbs/master on Tue Mar 24 20:58:43 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/d0d4f7f9dffc633a265ea1d1
    Modified Files:
    src/ssh/ssh-trans.c src/ssh/test/dssh_test_internal.h test_algo_key.c test_conn.c test_transport.c
    Log Message:
    Add defensive guard coverage tests (32 new tests)

    Test all defense-in-depth branches that were previously uncovered:

    Registration guards (test_transport.c, 9 tests):
    - kex/comp/lang toolong: name > 64 chars → DSSH_ERROR_TOOLONG
    - kex/key_algo/enc/mac/comp/lang toomany: entries == SIZE_MAX

    Blocksize + cleanup guards (test_transport.c, 2 tests):
    - tx_block_size/rx_block_size clamp blocksize < 8 to minimum 8
    (made DSSH_TESTABLE for direct testing)
    - transport_cleanup with NULL cleanup function pointers

    Key algo guards (test_algo_key.c, 6 tests):
    - ed25519/rsa haskey(NULL) → false
    - ed25519/rsa cleanup(NULL) → no-op
    - ed25519/rsa get_pub_str with bufsz too small → DSSH_ERROR_TOOLONG

    Connection state guards (test_conn.c, 16 tests):
    - session_write/write_ext with !open and close_received
    - channel_write with !open and close_received
    - channel_read on empty raw queue
    - channel_poll with eof_received and close_received
    - session_poll with close_received on READ and READEXT
    - stdout/stderr signal mark already consumed
    - channel_poll/session_poll with timeout_ms=-1 (infinite wait,
    data already ready)
    - session_read_ext on empty stderr buffer

    Total missed branches: 443 → 414 (82.41% → 83.56%).

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

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