* Resolve #2262

* Enhance request handling on Windows by adding early response check for large request bodies

* Enhance early response handling for large requests with long URIs on Windows
This commit is contained in:
yhirose
2026-01-18 00:38:43 -05:00
committed by GitHub
parent 0e1b52b23e
commit a38a076571
2 changed files with 91 additions and 2 deletions

View File

@@ -6567,6 +6567,53 @@ TEST_F(ServerTest, PreCompressionLoggingOnlyPreLogger) {
EXPECT_EQ(test_content, pre_compression_body);
}
TEST_F(ServerTest, SendLargeBodyAfterRequestLineError) {
{
Request req;
req.method = "POST";
req.path = "/post-large?q=" + LONG_QUERY_VALUE;
req.body = LARGE_DATA;
Response res;
auto error = Error::Success;
auto start = std::chrono::high_resolution_clock::now();
cli_.set_keep_alive(true);
auto ret = cli_.send(req, res, error);
auto end = std::chrono::high_resolution_clock::now();
auto elapsed =
std::chrono::duration_cast<std::chrono::milliseconds>(end - start)
.count();
EXPECT_FALSE(ret);
EXPECT_EQ(StatusCode::UriTooLong_414, res.status);
EXPECT_EQ("close", res.get_header_value("Connection"));
EXPECT_FALSE(cli_.is_socket_open());
EXPECT_LE(elapsed, 200);
}
{
// Send an extra GET request to ensure error recovery without hanging
Request req;
req.method = "GET";
req.path = "/hi";
auto start = std::chrono::high_resolution_clock::now();
auto res = cli_.send(req);
auto end = std::chrono::high_resolution_clock::now();
auto elapsed =
std::chrono::duration_cast<std::chrono::milliseconds>(end - start)
.count();
ASSERT_TRUE(res);
EXPECT_EQ(StatusCode::OK_200, res->status);
EXPECT_EQ("Hello World!", res->body);
EXPECT_LE(elapsed, 100);
}
}
TEST(ZstdDecompressor, ChunkedDecompression) {
std::string data;
for (size_t i = 0; i < 32 * 1024; ++i) {