@@ -6106,6 +6106,8 @@ TEST(MultipartFormDataTest, PutInvalidBoundaryChars) {
61066106}
61076107
61086108TEST (MultipartFormDataTest, AlternateFilename) {
6109+ auto handled = false ;
6110+
61096111 Server svr;
61106112 svr.Post (" /test" , [&](const Request &req, Response &res) {
61116113 ASSERT_EQ (3u , req.files .size ());
@@ -6130,13 +6132,16 @@ TEST(MultipartFormDataTest, AlternateFilename) {
61306132 ASSERT_EQ (" text default" , it->second .content );
61316133
61326134 res.set_content (" ok" , " text/plain" );
6135+
6136+ handled = true ;
61336137 });
61346138
61356139 thread t = thread ([&] { svr.listen (HOST, PORT); });
61366140 auto se = detail::scope_exit ([&] {
61376141 svr.stop ();
61386142 t.join ();
61396143 ASSERT_FALSE (svr.is_running ());
6144+ ASSERT_TRUE (handled);
61406145 });
61416146
61426147 svr.wait_until_ready ();
@@ -6168,6 +6173,52 @@ TEST(MultipartFormDataTest, AlternateFilename) {
61686173 ASSERT_TRUE (send_request (1 , req));
61696174}
61706175
6176+ TEST (MultipartFormDataTest, CloseDelimiterWithoutCRLF) {
6177+ auto handled = false ;
6178+
6179+ Server svr;
6180+ svr.Post (" /test" , [&](const Request &req, Response &) {
6181+ ASSERT_EQ (2u , req.files .size ());
6182+
6183+ auto it = req.files .begin ();
6184+ ASSERT_EQ (" text1" , it->second .name );
6185+ ASSERT_EQ (" text1" , it->second .content );
6186+
6187+ ++it;
6188+ ASSERT_EQ (" text2" , it->second .name );
6189+ ASSERT_EQ (" text2" , it->second .content );
6190+
6191+ handled = true ;
6192+ });
6193+
6194+ thread t = thread ([&] { svr.listen (HOST, PORT); });
6195+ auto se = detail::scope_exit ([&] {
6196+ svr.stop ();
6197+ t.join ();
6198+ ASSERT_FALSE (svr.is_running ());
6199+ ASSERT_TRUE (handled);
6200+ });
6201+
6202+ svr.wait_until_ready ();
6203+
6204+ auto req = " POST /test HTTP/1.1\r\n "
6205+ " Content-Type: multipart/form-data;boundary=--------\r\n "
6206+ " Content-Length: 146\r\n "
6207+ " \r\n ----------\r\n "
6208+ " Content-Disposition: form-data; name=\" text1\"\r\n "
6209+ " \r\n "
6210+ " text1"
6211+ " \r\n ----------\r\n "
6212+ " Content-Disposition: form-data; name=\" text2\"\r\n "
6213+ " \r\n "
6214+ " text2"
6215+ " \r\n ------------" ;
6216+
6217+ std::string resonse;
6218+ ASSERT_TRUE (send_request (1 , req, &resonse));
6219+ ASSERT_EQ (" 200" , resonse.substr (9 , 3 ));
6220+ }
6221+
61716222#endif
61726223
61736224#ifndef _WIN32
0 commit comments