From 824f66f2eb1776287a341f30f15d4599630e3c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Jerci=C5=84ski?= Date: Tue, 25 Nov 2025 13:43:56 +0100 Subject: [PATCH] prevent buffer overflow on large I2PControl requests --- daemon/I2PControl.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/daemon/I2PControl.cpp b/daemon/I2PControl.cpp index bcb6ea03..d5c9fc96 100644 --- a/daemon/I2PControl.cpp +++ b/daemon/I2PControl.cpp @@ -257,10 +257,13 @@ namespace client return; // TODO: } std::streamoff rem = contentLength + ss.tellg () - bytes_transferred; // more bytes to read - if (rem > 0) + while (rem > 0) // read in chunks to prevent buffer overflow { - bytes_transferred = boost::asio::read (*socket, boost::asio::buffer (buf->data (), rem)); + size_t toRead = std::min ((size_t)rem, buf->size ()); // don't exceed buffer size + bytes_transferred = boost::asio::read (*socket, boost::asio::buffer (buf->data (), toRead)); + if (bytes_transferred == 0) break; ss.write (buf->data (), bytes_transferred); + rem -= bytes_transferred; } } std::ostringstream response;