memory, threading, network hardening

Signed-off-by: Pavel Okhlopkov <pavel.okhlopkov@flant.com>
This commit is contained in:
Pavel Okhlopkov 2026-04-06 21:19:37 +03:00
parent 312994be83
commit 2e8856bacd
9 changed files with 135 additions and 24 deletions

View file

@ -571,7 +571,21 @@ void WorldSocket::pumpNetworkIO() {
}
receiveBuffer.insert(receiveBuffer.end(), buffer, buffer + receivedSize);
} else {
receiveBuffer.insert(receiveBuffer.end(), buffer, buffer + received);
// Non-fast path: same overflow pre-check as fast path to prevent
// unbounded buffer growth before the post-check below.
size_t liveBytes = bufferedBytes();
if (liveBytes > kMaxReceiveBufferBytes || receivedSize > (kMaxReceiveBufferBytes - liveBytes)) {
compactReceiveBuffer();
liveBytes = bufferedBytes();
}
if (liveBytes > kMaxReceiveBufferBytes || receivedSize > (kMaxReceiveBufferBytes - liveBytes)) {
LOG_ERROR("World socket receive buffer would overflow (buffered=", liveBytes,
" incoming=", receivedSize, " max=", kMaxReceiveBufferBytes,
"). Disconnecting to recover framing.");
closeSocketNoJoin();
return;
}
receiveBuffer.insert(receiveBuffer.end(), buffer, buffer + receivedSize);
}
if (bufferedBytes() > kMaxReceiveBufferBytes) {
LOG_ERROR("World socket receive buffer overflow (", bufferedBytes(),