__                 _ _                _
  / _| ___   ___   __| | |__   __ _ _ __| | __
 | |_ / _ \ / _ \ / _` | '_ \ / _` | '__| |/ /
 |  _| (_) | (_) | (_| | |_) | (_| | |  |   <
 |_|  \___/ \___/ \__,_|_.__/ \__,_|_|  |_|\_\

A personal BBS  ·  Missoula, Montana  ·  formerly NaClCON BBS

Connect from your terminal: telnet naclconbbs.net 23  |  ssh naclconbbs.net -p 2222

  • src/doors/syncconquer/door/door_input.c door_io.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Aug 9 23:03:12 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/e86d28bc4745848436483773
    Modified Files:
    src/doors/syncconquer/door/door_input.c door_io.c
    Log Message:
    syncconquer: a sequence split across reads is not a lone Escape

    This door reads and parses in two stages -- door_io_pump() reads the client into a ring, door_input_drain() parses keys back out of it, both called from Fill_Buffer_From_System() -- and the split escape sequence was losing the race at each of them.

    door_input_drain() judged the pending lone-ESC timer before draining the ring, so a sequence whose tail was already sitting there was decoded as an Escape plus its body as ordinary keys. Judge it after the loop instead: the ring is empty by then, and door_io_pump() has just filled it, so an ESC still pending really did arrive alone.

    door_io_pump() in turn read once per tick, which splits a sequence outright once 256 bytes accumulate ahead of it. Read until the client has nothing left, bounded so a flooding one cannot stall the frame.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

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