@@ -6084,6 +6084,46 @@ TEST_F(PayloadMaxLengthTest, ExceedLimit) {
60846084 EXPECT_EQ (StatusCode::OK_200, res->status );
60856085}
60866086
6087+ TEST (PayloadMaxLengthTest2, LimitOn32bit) {
6088+ Server svr;
6089+ char data[1024 ]{0 };
6090+ svr.Get (" /" , [&](const Request &, Response &res) {
6091+ constexpr uint64_t size = std::numeric_limits<uint32_t >::max () + 1ull ;
6092+ res.set_content_provider (
6093+ size, " text/plain" ,
6094+ [&](size_t /* offset*/ , size_t length, DataSink &sink) {
6095+ sink.write (data, std::min (length, sizeof (data)));
6096+ return true ;
6097+ });
6098+ });
6099+
6100+ auto listen_thread = std::thread ([&svr]() { svr.listen (HOST, PORT); });
6101+ auto se = detail::scope_exit ([&] {
6102+ svr.stop ();
6103+ listen_thread.join ();
6104+ ASSERT_FALSE (svr.is_running ());
6105+ });
6106+ svr.wait_until_ready ();
6107+
6108+ Client cli (HOST, PORT);
6109+ uint64_t expected_size = static_cast <uint64_t >(-1 );
6110+ uint64_t total_size = 0 ;
6111+ auto res = cli.Get (
6112+ " /" , Headers (),
6113+ [&](const Response &response) {
6114+ EXPECT_EQ (StatusCode::OK_200, response.status );
6115+ expected_size = response.get_header_value_u64 (" Content-Length" , 0 );
6116+ return true ;
6117+ },
6118+ [&](const char */*data*/, size_t data_length) {
6119+ total_size += data_length;
6120+ return true ;
6121+ });
6122+
6123+ ASSERT_TRUE (res);
6124+ ASSERT_EQ (total_size, expected_size);
6125+ }
6126+
60876127TEST (HostAndPortPropertiesTest, NoSSL) {
60886128 httplib::Client cli (" www.google.com" , 1234 );
60896129 ASSERT_EQ (" www.google.com" , cli.host ());
0 commit comments