prevent buffer overflow on large I2PControl requests

This commit is contained in:
Łukasz Jerciński
2025-11-25 13:43:56 +01:00
parent 96e14c84d7
commit 824f66f2eb

View File

@@ -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;