• src/ssh/kex/dh-gex-sha256.c src/ssh/test/dssh_test_alloc.c dssh_test_a

    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/405365deef5dbd0cfaadcde4
    Modified Files:
    src/ssh/kex/dh-gex-sha256.c src/ssh/test/dssh_test_alloc.c dssh_test_alloc.h test_alloc.c test_transport.c
    Log Message:
    dh-gex-sha256.c: 100% branch coverage

    Thread-local alloc injection: add dssh_test_alloc_exclude_thread()
    matching the ossl pattern, so server threads can opt out of library
    malloc failure injection during two-threaded KEX tests.

    alloc/kex_server iterate: single-threaded server KEX with library
    alloc injection via dssh_test_alloc_fail_after(). Covers malloc
    failures in serialize_bn_mpint, shared_secret, reply buffer, and
    exchange_hash on the server path.

    alloc/kex_client iterate: two-threaded KEX with server excluded
    from alloc injection. Covers client-side malloc failures.

    Client ka guard tests: two-threaded KEX with client's
    key_algo_selected set to NULL or stub with NULL verify.

    Client parse tests (7 tests via bad-server threads):
    - recv GROUP failure (server closes before sending)
    - GEX_GROUP empty / missing g
    - GEX_REPLY wrong msg_type
    - GEX_REPLY too short for K_S / K_S overrun
    - GEX_REPLY f=0 (invalid DH value)
    - GEX_REPLY too short for sig / sig overrun

    Server ka==NULL targeted test.

    Source cleanup: break client-side K_S and sig parse chains out of
    || expressions, guard dead dssh_parse_uint32 checks with
    #ifndef DSSH_TESTING (same pattern as parse_bn_mpint line 60).

    Result: dh-gex-sha256.c 246/246 branches covered (100.00%).

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

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