mirror of
https://github.com/yhirose/cpp-httplib
synced 2024-11-21 14:29:10 -07:00
Fix #1214
This commit is contained in:
parent
846151b605
commit
c82d1e52cc
2 changed files with 42 additions and 3 deletions
13
httplib.h
13
httplib.h
|
@ -4965,6 +4965,14 @@ inline bool Server::parse_request_line(const char *s, Request &req) {
|
||||||
if (req.version != "HTTP/1.1" && req.version != "HTTP/1.0") { return false; }
|
if (req.version != "HTTP/1.1" && req.version != "HTTP/1.0") { return false; }
|
||||||
|
|
||||||
{
|
{
|
||||||
|
// Skip URL fragment
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
if (req.target[i] == '#') {
|
||||||
|
req.target.erase(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
detail::split(req.target.data(), req.target.data() + req.target.size(), '?',
|
detail::split(req.target.data(), req.target.data() + req.target.size(), '?',
|
||||||
|
@ -7269,8 +7277,9 @@ inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path,
|
||||||
SSL_CTX_set_min_proto_version(ctx_, TLS1_1_VERSION);
|
SSL_CTX_set_min_proto_version(ctx_, TLS1_1_VERSION);
|
||||||
|
|
||||||
// add default password callback before opening encrypted private key
|
// add default password callback before opening encrypted private key
|
||||||
if (private_key_password != nullptr && (private_key_password[0] != '\0') ) {
|
if (private_key_password != nullptr && (private_key_password[0] != '\0')) {
|
||||||
SSL_CTX_set_default_passwd_cb_userdata(ctx_, (char *)private_key_password);
|
SSL_CTX_set_default_passwd_cb_userdata(ctx_,
|
||||||
|
(char *)private_key_password);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 ||
|
if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 ||
|
||||||
|
|
32
test/test.cc
32
test/test.cc
|
@ -1416,6 +1416,35 @@ TEST(InvalidFormatTest, StatusCode) {
|
||||||
ASSERT_FALSE(svr.is_running());
|
ASSERT_FALSE(svr.is_running());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(URLFragmentTest, WithFragment) {
|
||||||
|
Server svr;
|
||||||
|
|
||||||
|
svr.Get("/hi",
|
||||||
|
[](const Request &req, Response &/*res*/) {
|
||||||
|
EXPECT_TRUE(req.target == "/hi");
|
||||||
|
});
|
||||||
|
|
||||||
|
auto thread = std::thread([&]() { svr.listen(HOST, PORT); });
|
||||||
|
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
|
|
||||||
|
{
|
||||||
|
Client cli(HOST, PORT);
|
||||||
|
|
||||||
|
auto res = cli.Get("/hi#key1=val1=key2=val2");
|
||||||
|
EXPECT_TRUE(res);
|
||||||
|
EXPECT_EQ(200, res->status);
|
||||||
|
|
||||||
|
res = cli.Get("/hi%23key1=val1=key2=val2");
|
||||||
|
EXPECT_TRUE(res);
|
||||||
|
EXPECT_EQ(404, res->status);
|
||||||
|
}
|
||||||
|
|
||||||
|
svr.stop();
|
||||||
|
thread.join();
|
||||||
|
ASSERT_FALSE(svr.is_running());
|
||||||
|
}
|
||||||
|
|
||||||
class ServerTest : public ::testing::Test {
|
class ServerTest : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
ServerTest()
|
ServerTest()
|
||||||
|
@ -4791,7 +4820,6 @@ TEST(HttpToHttpsRedirectTest, CertFile) {
|
||||||
t.join();
|
t.join();
|
||||||
t2.join();
|
t2.join();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
TEST(MultipartFormDataTest, LargeData) {
|
TEST(MultipartFormDataTest, LargeData) {
|
||||||
SSLServer svr(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE);
|
SSLServer svr(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE);
|
||||||
|
@ -4855,3 +4883,5 @@ TEST(MultipartFormDataTest, LargeData) {
|
||||||
svr.stop();
|
svr.stop();
|
||||||
t.join();
|
t.join();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue