mirror of
https://github.com/yhirose/cpp-httplib
synced 2024-11-21 14:29:10 -07:00
Fix #1437
This commit is contained in:
parent
5758769ad3
commit
9d0a9d4e23
2 changed files with 30 additions and 8 deletions
11
httplib.h
11
httplib.h
|
@ -5855,7 +5855,16 @@ Server::process_request(Stream &strm, bool close_connection,
|
||||||
routed = true;
|
routed = true;
|
||||||
} else {
|
} else {
|
||||||
res.status = 500;
|
res.status = 500;
|
||||||
res.set_header("EXCEPTION_WHAT", e.what());
|
std::string val;
|
||||||
|
auto s = e.what();
|
||||||
|
for (size_t i = 0; s[i]; i++) {
|
||||||
|
switch (s[i]) {
|
||||||
|
case '\r': val += "\\r"; break;
|
||||||
|
case '\n': val += "\\n"; break;
|
||||||
|
default: val += s[i]; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.set_header("EXCEPTION_WHAT", val);
|
||||||
}
|
}
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
if (exception_handler_) {
|
if (exception_handler_) {
|
||||||
|
|
27
test/test.cc
27
test/test.cc
|
@ -3839,9 +3839,12 @@ TEST(MountTest, Unmount) {
|
||||||
TEST(ExceptionTest, ThrowExceptionInHandler) {
|
TEST(ExceptionTest, ThrowExceptionInHandler) {
|
||||||
Server svr;
|
Server svr;
|
||||||
|
|
||||||
svr.Get("/hi", [&](const Request & /*req*/, Response & /*res*/) {
|
svr.Get("/exception", [&](const Request & /*req*/, Response & /*res*/) {
|
||||||
throw std::runtime_error("exception...");
|
throw std::runtime_error("exception...");
|
||||||
// res.set_content("Hello World!", "text/plain");
|
});
|
||||||
|
|
||||||
|
svr.Get("/unknown", [&](const Request & /*req*/, Response & /*res*/) {
|
||||||
|
throw std::runtime_error("exception\r\n...");
|
||||||
});
|
});
|
||||||
|
|
||||||
auto listen_thread = std::thread([&svr]() { svr.listen("localhost", PORT); });
|
auto listen_thread = std::thread([&svr]() { svr.listen("localhost", PORT); });
|
||||||
|
@ -3854,11 +3857,21 @@ TEST(ExceptionTest, ThrowExceptionInHandler) {
|
||||||
|
|
||||||
Client cli("localhost", PORT);
|
Client cli("localhost", PORT);
|
||||||
|
|
||||||
auto res = cli.Get("/hi");
|
{
|
||||||
ASSERT_TRUE(res);
|
auto res = cli.Get("/exception");
|
||||||
EXPECT_EQ(500, res->status);
|
ASSERT_TRUE(res);
|
||||||
ASSERT_TRUE(res->has_header("EXCEPTION_WHAT"));
|
EXPECT_EQ(500, res->status);
|
||||||
EXPECT_EQ("exception...", res->get_header_value("EXCEPTION_WHAT"));
|
ASSERT_TRUE(res->has_header("EXCEPTION_WHAT"));
|
||||||
|
EXPECT_EQ("exception...", res->get_header_value("EXCEPTION_WHAT"));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto res = cli.Get("/unknown");
|
||||||
|
ASSERT_TRUE(res);
|
||||||
|
EXPECT_EQ(500, res->status);
|
||||||
|
ASSERT_TRUE(res->has_header("EXCEPTION_WHAT"));
|
||||||
|
EXPECT_EQ("exception\\r\\n...", res->get_header_value("EXCEPTION_WHAT"));
|
||||||
|
}
|
||||||
|
|
||||||
svr.stop();
|
svr.stop();
|
||||||
listen_thread.join();
|
listen_thread.join();
|
||||||
|
|
Loading…
Reference in a new issue