mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-02 13:32:54 +07:00
Merge pull request #2497 from superm1/superm1/SWSPLAT-23636
Limit the number of header lines per multipart form-data part
This commit is contained in:
@@ -13754,6 +13754,43 @@ TEST(MultipartFormDataTest, MakeFileProvider) {
|
||||
EXPECT_EQ(StatusCode::OK_200, res->status);
|
||||
}
|
||||
|
||||
TEST(MultipartFormDataTest, ExcessivePartHeaders) {
|
||||
// Verify that a multipart part with more than CPPHTTPLIB_HEADER_MAX_COUNT
|
||||
// (100) headers is rejected with a 400 Bad Request response.
|
||||
Server svr;
|
||||
svr.Post("/post", [&](const Request & /*req*/, Response &res) {
|
||||
res.set_content("ok", "text/plain");
|
||||
});
|
||||
|
||||
thread t = thread([&] { svr.listen(HOST, PORT); });
|
||||
auto se = detail::scope_exit([&] {
|
||||
svr.stop();
|
||||
t.join();
|
||||
ASSERT_FALSE(svr.is_running());
|
||||
});
|
||||
|
||||
svr.wait_until_ready();
|
||||
|
||||
// Build a multipart part with 101 custom headers (exceeding CPPHTTPLIB_HEADER_MAX_COUNT=100)
|
||||
std::stringstream body;
|
||||
body << "--simpleboundary\r\n"
|
||||
<< "Content-Disposition: form-data; name=\"field1\"\r\n";
|
||||
for (int i = 0; i < 101; i++) {
|
||||
body << "X-Custom-Header-" << i << ": value\r\n";
|
||||
}
|
||||
body << "\r\n"
|
||||
<< "value1\r\n"
|
||||
<< "--simpleboundary--\r\n";
|
||||
|
||||
std::string content_type = "multipart/form-data; boundary=simpleboundary";
|
||||
|
||||
Client cli(HOST, PORT);
|
||||
auto res = cli.Post("/post", body.str(), content_type.c_str());
|
||||
|
||||
ASSERT_TRUE(res);
|
||||
EXPECT_EQ(StatusCode::BadRequest_400, res->status);
|
||||
}
|
||||
|
||||
TEST(MakeFileBodyTest, Basic) {
|
||||
const std::string file_content(4096, 'Z');
|
||||
const std::string tmp_path = "./httplib_test_make_file_body.bin";
|
||||
|
||||
Reference in New Issue
Block a user