open
https://gitlab.synchro.net/main/sbbs/-/work_items/1325
`telnet_gate()` in `src/sbbs3/telgate.cpp` ignores the return value of `RingBufWrite()` (lines 468 and 470 on master, 95ff8c74). `RingBufWrite()` only copies what fits in `outbuf`, so once `outbuf` fills up, whatever doesn't fit is dropped.
I ran into it with an `?rlogin` gate to a door that sends sixel, SyncTERM 1.10b as the caller, Synchronet 3.22a on Linux. Pictures came out with a band of garbage. With a TCP tap on both sides of sbbs, the caller's stream matched the door's until a chunk in the middle of the sixel data was missing.
Keeping the unwritten part and retrying it, or only reading as much as `outbuf` can take, would fix it without blocking the loop. The local echo at line 420 has the same unchecked call.
--- SBBSecho 3.38-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)