• src/sbbs3/js_socket.cpp

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thursday, December 18, 2025 18:17:32
    https://gitlab.synchro.net/main/sbbs/-/commit/130d267d095b28c5c829b2d3
    Modified Files:
    src/sbbs3/js_socket.cpp
    Log Message:
    Code clean-up

    - TRUE -> true
    - Eliminate unnecessary free(NULL) checks
    - Fix the potential socket leaks in error handling in socket constructors
    as reported by ChatGPT via Nelgin

    Something I noticed while doing this: functions in this file call call_socket_open_callback() from main.cpp either directly or via a callback from xpms API calls. This only work if the terminal server is running and has been initialized. So ... running other servers in their own process without
    the terminal server (as some sysops do) won't count open sockets accurately. <shrug>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Saturday, December 20, 2025 12:33:04
    https://gitlab.synchro.net/main/sbbs/-/commit/3a4f6ecdd4aacf481635299a
    Modified Files:
    src/sbbs3/js_socket.cpp
    Log Message:
    Fix CID 640043 (USE_AFTER_FREE)

    xpms_destroy() frees the passed pointer, so no need to free() it after.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wednesday, May 06, 2026 19:41:53
    https://gitlab.synchro.net/main/sbbs/-/commit/fbfdfc8140cdcb50c11933f4
    Modified Files:
    src/sbbs3/js_socket.cpp
    Log Message:
    js_socket: fix js_sendto getaddrinfo error-capture parens (CID 639937)

    The expression was

    if ((result = getaddrinfo(...) != 0))

    which parses as result = (getaddrinfo(...) != 0), so result becomes 0
    or 1 instead of the actual EAI_* error code. The subsequent gai_strerror(result) and "%d" format then report the wrong error.

    Move the closing paren so the assignment captures the real return:

    if ((result = getaddrinfo(...)) != 0)

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

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wednesday, May 06, 2026 22:36:57
    https://gitlab.synchro.net/main/sbbs/-/commit/99b45532cd579daceacd8f72
    Modified Files:
    src/sbbs3/js_socket.cpp
    Log Message:
    js_socket: close socket on fail-path in connected_socket_constructor (CID 530501)

    The 'fail:' label freed p without closing p->sock, leaking the socket
    handle when set_socket_options() failed after a successful socket()
    call. Initialize p->sock to INVALID_SOCKET right after the memset
    (so the getaddrinfo-failure path doesn't accidentally close fd 0)
    and have the fail label closesocket() when the socket is valid.

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

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wednesday, May 06, 2026 23:22:41
    https://gitlab.synchro.net/main/sbbs/-/commit/5a2b68dfa4f6350486ed05e3
    Modified Files:
    src/sbbs3/js_socket.cpp
    Log Message:
    js_socket: cast setsockopt TCP_NODELAY to void in TLS session setup (CID 639936)

    Same pattern as the websrvr TCP_NODELAY fix in 91988f5ef: TCP_NODELAY
    is a best-effort latency optimization for the TLS handshake; if the
    setsockopt is rejected (e.g. on a non-TCP socket) the session still
    works. Make the discarded return explicit.

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

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