mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-27 12:31:28 +00:00
Accept a Unix socket path with "//" in it
Client took any string with "//" in it that it could not use as a URL for a bad URL, so a Unix socket path such as /run/app//api.sock gave an invalid client. Only a string that starts with a scheme and "://", or with "//", is taken for a URL now.
This commit is contained in:
1 parent
be5043a240
commit
560126bffc
2 files changed
+8
-2
No files matched your search
@@ -17988,8 +17988,10 @@ inline Client::Client(const std::string &scheme_host_port,
|
|||||||
cli_ = detail::make_unique<ClientImpl>(host, port, client_cert_path,
|
cli_ = detail::make_unique<ClientImpl>(host, port, client_cert_path,
|
||||||
client_key_path);
|
client_key_path);
|
||||||
}
|
}
|
||||||
} else if (scheme_host_port.find("//") != std::string::npos) {
|
} else if (scheme_host_port.compare(0, 2, "//") == 0 ||
|
||||||
// A URL, but not one this client can use, such as one with userinfo
|
scheme_host_port.find("://") < scheme_host_port.find('/')) {
|
||||||
|
// A URL, but not one this client can use, such as one with userinfo. A
|
||||||
|
// Unix socket path may have "//" further on.
|
||||||
cli_ = detail::make_unique<detail::InvalidClientImpl>();
|
cli_ = detail::make_unique<detail::InvalidClientImpl>();
|
||||||
} else {
|
} else {
|
||||||
// NOTE: Update TEST(UniversalClientImplTest, Ipv6LiteralAddress)
|
// NOTE: Update TEST(UniversalClientImplTest, Ipv6LiteralAddress)
|
||||||
|
|||||||
@@ -173,6 +173,8 @@ TEST_F(UnixSocketTest, pathname) {
|
|||||||
ASSERT_TRUE(svr.is_running());
|
ASSERT_TRUE(svr.is_running());
|
||||||
|
|
||||||
client_GET(pathname_);
|
client_GET(pathname_);
|
||||||
|
// ".//x.sock", which is not taken for a URL
|
||||||
|
client_GET("./" + pathname_.substr(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) || \
|
#if defined(__linux__) || \
|
||||||
@@ -15633,6 +15635,8 @@ TEST(HostAndPortPropertiesTest, UserinfoIsNotSupported) {
|
|||||||
httplib::Client cli("http://user:pass@localhost:1234");
|
httplib::Client cli("http://user:pass@localhost:1234");
|
||||||
ASSERT_FALSE(cli.is_valid());
|
ASSERT_FALSE(cli.is_valid());
|
||||||
EXPECT_FALSE(cli.Get("/"));
|
EXPECT_FALSE(cli.Get("/"));
|
||||||
|
|
||||||
|
EXPECT_FALSE(httplib::Client("//user@localhost:1234").is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(HostAndPortPropertiesTest, TrailingCharactersInPort) {
|
TEST(HostAndPortPropertiesTest, TrailingCharactersInPort) {
|
||||||
|
|||||||
Reference in new issue
Block a user