From cd28598e5b7131b9bf9d9a27a7cd83ff4b914d76 Mon Sep 17 00:00:00 2001 From: Daniel Sewtz Date: Thu, 7 Feb 2019 23:47:05 +0100 Subject: [PATCH] Fixes to rfc7230: fix #1435, fix #1438 * Example and test can be built on msvc v141 15.9.6 using /std:c++17 and BOOST_BEAST_USE_STD_STRING_VIEW. * changed string_view.to_string() to std:string(string_view), awaiting availability of Library Fundamentals TS here. * Reactivated relevant tests to param_list. #ifdef 0 test exhibited same assertion failed error in debug mode. Now fixed in DEBUG on msvc v141 15.9.6 with BOOST_BEAST_USE_STD_STRING_VIEW and /std:c++17. * Looked up http paramters (transfer-encoding, etc.) and changed tests as well as fixing comment to match specs. --- CHANGELOG.md | 1 + .../advanced/server-flex/advanced_server_flex.cpp | 10 +++++----- example/advanced/server/advanced_server.cpp | 10 +++++----- example/cppcon2018/http_session.cpp | 10 +++++----- example/doc/http_examples.hpp | 2 +- .../http/server/async-ssl/http_server_async_ssl.cpp | 10 +++++----- example/http/server/async/http_server_async.cpp | 10 +++++----- .../http/server/coro-ssl/http_server_coro_ssl.cpp | 10 +++++----- example/http/server/coro/http_server_coro.cpp | 10 +++++----- example/http/server/fast/http_server_fast.cpp | 4 ++-- example/http/server/flex/http_server_flex.cpp | 10 +++++----- example/http/server/small/http_server_small.cpp | 2 +- .../stackless-ssl/http_server_stackless_ssl.cpp | 10 +++++----- .../http/server/stackless/http_server_stackless.cpp | 10 +++++----- .../http/server/sync-ssl/http_server_sync_ssl.cpp | 10 +++++----- example/http/server/sync/http_server_sync.cpp | 12 ++++++------ example/websocket/server/chat-multi/http_session.cpp | 10 +++++----- include/boost/beast/http/impl/rfc7230.ipp | 4 +++- test/beast/http/basic_parser.cpp | 4 ++-- test/beast/http/chunk_encode.cpp | 4 ++-- test/beast/http/message.cpp | 2 +- test/beast/http/rfc7230.cpp | 6 ++++-- test/beast/http/test_parser.hpp | 2 +- test/beast/http/write.cpp | 2 +- 24 files changed, 85 insertions(+), 80 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29a479da..f75ac1b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Version 211: * Add flat_stream * flat_buffer::clear preserves capacity * multi_buffer::clear preserves capacity +* Fixes to rfc7230 -------------------------------------------------------------------------------- diff --git a/example/advanced/server-flex/advanced_server_flex.cpp b/example/advanced/server-flex/advanced_server_flex.cpp index 407e1389..b6b0d375 100644 --- a/example/advanced/server-flex/advanced_server_flex.cpp +++ b/example/advanced/server-flex/advanced_server_flex.cpp @@ -89,8 +89,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -129,7 +129,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -142,7 +142,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -155,7 +155,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/advanced/server/advanced_server.cpp b/example/advanced/server/advanced_server.cpp index 6e50f291..5cbbdbed 100644 --- a/example/advanced/server/advanced_server.cpp +++ b/example/advanced/server/advanced_server.cpp @@ -83,8 +83,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -123,7 +123,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -136,7 +136,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -149,7 +149,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/cppcon2018/http_session.cpp b/example/cppcon2018/http_session.cpp index 57b13b70..11415726 100644 --- a/example/cppcon2018/http_session.cpp +++ b/example/cppcon2018/http_session.cpp @@ -60,8 +60,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -100,7 +100,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -113,7 +113,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -126,7 +126,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/doc/http_examples.hpp b/example/doc/http_examples.hpp index 409893d2..285b9e56 100644 --- a/example/doc/http_examples.hpp +++ b/example/doc/http_examples.hpp @@ -339,7 +339,7 @@ void do_server_head( // we do not recognize the request method. res.result(status::bad_request); res.set(field::content_type, "text/plain"); - res.body() = "Invalid request-method '" + req.method_string().to_string() + "'"; + res.body() = "Invalid request-method '" + std::string(req.method_string()) + "'"; res.prepare_payload(); break; } diff --git a/example/http/server/async-ssl/http_server_async_ssl.cpp b/example/http/server/async-ssl/http_server_async_ssl.cpp index 549e560c..a388bb50 100644 --- a/example/http/server/async-ssl/http_server_async_ssl.cpp +++ b/example/http/server/async-ssl/http_server_async_ssl.cpp @@ -82,8 +82,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -122,7 +122,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -135,7 +135,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -148,7 +148,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/async/http_server_async.cpp b/example/http/server/async/http_server_async.cpp index d7ada283..7cfb1d22 100644 --- a/example/http/server/async/http_server_async.cpp +++ b/example/http/server/async/http_server_async.cpp @@ -78,8 +78,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -118,7 +118,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -131,7 +131,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -144,7 +144,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/coro-ssl/http_server_coro_ssl.cpp b/example/http/server/coro-ssl/http_server_coro_ssl.cpp index 63cdc4c8..b58df1eb 100644 --- a/example/http/server/coro-ssl/http_server_coro_ssl.cpp +++ b/example/http/server/coro-ssl/http_server_coro_ssl.cpp @@ -80,8 +80,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -120,7 +120,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -133,7 +133,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -146,7 +146,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/coro/http_server_coro.cpp b/example/http/server/coro/http_server_coro.cpp index 4fc3a453..0a5095e3 100644 --- a/example/http/server/coro/http_server_coro.cpp +++ b/example/http/server/coro/http_server_coro.cpp @@ -76,8 +76,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -116,7 +116,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -129,7 +129,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -142,7 +142,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/fast/http_server_fast.cpp b/example/http/server/fast/http_server_fast.cpp index eb3e4ca2..d6814542 100644 --- a/example/http/server/fast/http_server_fast.cpp +++ b/example/http/server/fast/http_server_fast.cpp @@ -196,7 +196,7 @@ private: // we do not recognize the request method. send_bad_response( http::status::bad_request, - "Invalid request-method '" + req.method_string().to_string() + "'\r\n"); + "Invalid request-method '" + std::string(req.method_string()) + "'\r\n"); break; } } @@ -269,7 +269,7 @@ private: file_response_->result(http::status::ok); file_response_->keep_alive(false); file_response_->set(http::field::server, "Beast"); - file_response_->set(http::field::content_type, mime_type(target.to_string())); + file_response_->set(http::field::content_type, mime_type(std::string(target))); file_response_->body() = std::move(file); file_response_->prepare_payload(); diff --git a/example/http/server/flex/http_server_flex.cpp b/example/http/server/flex/http_server_flex.cpp index 08700c3b..54fec0b9 100644 --- a/example/http/server/flex/http_server_flex.cpp +++ b/example/http/server/flex/http_server_flex.cpp @@ -82,8 +82,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -122,7 +122,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -135,7 +135,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -148,7 +148,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/small/http_server_small.cpp b/example/http/server/small/http_server_small.cpp index 111e5414..f5d89fab 100644 --- a/example/http/server/small/http_server_small.cpp +++ b/example/http/server/small/http_server_small.cpp @@ -119,7 +119,7 @@ private: response_.set(http::field::content_type, "text/plain"); beast::ostream(response_.body()) << "Invalid request-method '" - << request_.method_string().to_string() + << std::string(request_.method_string()) << "'"; break; } diff --git a/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp b/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp index 5d46e3c9..e0658e86 100644 --- a/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp +++ b/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp @@ -83,8 +83,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -123,7 +123,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -136,7 +136,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -149,7 +149,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/stackless/http_server_stackless.cpp b/example/http/server/stackless/http_server_stackless.cpp index 005fb950..b3d75505 100644 --- a/example/http/server/stackless/http_server_stackless.cpp +++ b/example/http/server/stackless/http_server_stackless.cpp @@ -79,8 +79,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -119,7 +119,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -132,7 +132,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -145,7 +145,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/sync-ssl/http_server_sync_ssl.cpp b/example/http/server/sync-ssl/http_server_sync_ssl.cpp index 9b66b4ba..f25d045d 100644 --- a/example/http/server/sync-ssl/http_server_sync_ssl.cpp +++ b/example/http/server/sync-ssl/http_server_sync_ssl.cpp @@ -77,8 +77,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -117,7 +117,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -130,7 +130,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -143,7 +143,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/http/server/sync/http_server_sync.cpp b/example/http/server/sync/http_server_sync.cpp index c8d80e43..170b96ba 100644 --- a/example/http/server/sync/http_server_sync.cpp +++ b/example/http/server/sync/http_server_sync.cpp @@ -74,9 +74,9 @@ path_cat( beast::string_view base, beast::string_view path) { - if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + if (base.empty()) + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -115,7 +115,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -128,7 +128,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -141,7 +141,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/example/websocket/server/chat-multi/http_session.cpp b/example/websocket/server/chat-multi/http_session.cpp index 80271c77..a5516fa3 100644 --- a/example/websocket/server/chat-multi/http_session.cpp +++ b/example/websocket/server/chat-multi/http_session.cpp @@ -60,8 +60,8 @@ path_cat( beast::string_view path) { if(base.empty()) - return path.to_string(); - std::string result = base.to_string(); + return std::string(path); + std::string result(base); #if BOOST_MSVC char constexpr path_separator = '\\'; if(result.back() == path_separator) @@ -100,7 +100,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; }; @@ -113,7 +113,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; }; @@ -126,7 +126,7 @@ handle_request( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; }; diff --git a/include/boost/beast/http/impl/rfc7230.ipp b/include/boost/beast/http/impl/rfc7230.ipp index 96ec902c..470eddee 100644 --- a/include/boost/beast/http/impl/rfc7230.ipp +++ b/include/boost/beast/http/impl/rfc7230.ipp @@ -316,7 +316,7 @@ increment() param-list = *( OWS ";" OWS param ) param = token OWS "=" OWS ( token / quoted-string ) - chunked;a=b;i=j,gzip;windowBits=12 + chunked;a=b;i=j;gzip;windowBits=12 x,y ,,,,,chameleon */ @@ -350,6 +350,8 @@ increment() } v_.first = string_view{&*p0, static_cast(it_ - p0)}; + if (it_ == last_) + return; detail::param_iter pi; pi.it = it_; pi.first = it_; diff --git a/test/beast/http/basic_parser.cpp b/test/beast/http/basic_parser.cpp index cd2b4fac..7d02fb96 100644 --- a/test/beast/http/basic_parser.cpp +++ b/test/beast/http/basic_parser.cpp @@ -1152,7 +1152,7 @@ public: "HTTP/1.1 200 OK\r\n" "Transfer-Encoding: chunked\r\n" "\r\n" - "0" + s.to_string() + "\r\n" + "0" + std::string(s) + "\r\n" "\r\n"; error_code ec; test_parser p; @@ -1169,7 +1169,7 @@ public: "HTTP/1.1 200 OK\r\n" "Transfer-Encoding: chunked\r\n" "\r\n" - "0" + s.to_string() + "\r\n" + "0" + std::string(s) + "\r\n" "\r\n"; error_code ec; test_parser p; diff --git a/test/beast/http/chunk_encode.cpp b/test/beast/http/chunk_encode.cpp index 8d15c228..0df2d3d3 100644 --- a/test/beast/http/chunk_encode.cpp +++ b/test/beast/http/chunk_encode.cpp @@ -195,11 +195,11 @@ public: std::string s; for(auto const& v : ce) { - s.append(v.first.to_string()); + s.append(std::string(v.first)); s.push_back(','); if(! v.second.empty()) { - s.append(v.second.to_string()); + s.append(std::string(v.second)); s.push_back(','); } } diff --git a/test/beast/http/message.cpp b/test/beast/http/message.cpp index a5ab6d16..26cc952c 100644 --- a/test/beast/http/message.cpp +++ b/test/beast/http/message.cpp @@ -205,7 +205,7 @@ public: bool get_keep_alive_impl(unsigned) const { return true; } bool has_content_length_impl() const { return false; } void set_method_impl(string_view) {} - void set_target_impl(string_view s) { target = s.to_string(); } + void set_target_impl(string_view s) { target = std::string(s); } void set_reason_impl(string_view) {} void set_chunked_impl(bool) {} void set_content_length_impl(boost::optional) {} diff --git a/test/beast/http/rfc7230.cpp b/test/beast/http/rfc7230.cpp index 6a1d48e9..4767ca64 100644 --- a/test/beast/http/rfc7230.cpp +++ b/test/beast/http/rfc7230.cpp @@ -88,6 +88,9 @@ public: cq("\t; \t xyz=1 ; ijk=\"q\\\"t\"", ";xyz=1;ijk=q\"t"); ce(";x;y"); + ce(";chunked;a=b;i=j;gzip;windowBits=12"); + ce(";chunked;a=b;i=j;gzip;windowBits=12;permessage-deflate"); + // invalid strings cs(";", ""); cs(";,", ""); @@ -96,6 +99,7 @@ public: cq(";xy=\"\x7f", ""); cq(";xy=\"\\", ""); cq(";xy=\"\\\x01\"", ""); + } static @@ -344,11 +348,9 @@ public: run() { testOptTokenList(); -#if 0 testParamList(); testExtList(); testTokenList(); -#endif } }; diff --git a/test/beast/http/test_parser.hpp b/test/beast/http/test_parser.hpp index b99716d2..d633aa5c 100644 --- a/test/beast/http/test_parser.hpp +++ b/test/beast/http/test_parser.hpp @@ -94,7 +94,7 @@ public: fc_->fail(ec); else ec = {}; - fields[name.to_string()] = value.to_string(); + fields[std::string(name)] = std::string(value); } void diff --git a/test/beast/http/write.cpp b/test/beast/http/write.cpp index cdc11420..7994c5fa 100644 --- a/test/beast/http/write.cpp +++ b/test/beast/http/write.cpp @@ -295,7 +295,7 @@ public: write(ts, m, ec); if(ec && ec != error::end_of_stream) BOOST_THROW_EXCEPTION(system_error{ec}); - return tr.str().to_string(); + return std::string(tr.str()); } void