match mount points on a segment boundary in handle_file_request (#2529)

This commit is contained in:
metsw24-max
2026-08-03 17:51:50 -04:00
committed by GitHub
parent 095a5c1caf
commit 2b8658fa99
2 changed files with 41 additions and 2 deletions
+33
View File
@@ -9635,6 +9635,39 @@ TEST(MountTest, Unmount) {
EXPECT_EQ(StatusCode::NotFound_404, res->status);
}
TEST(MountTest, PathSegmentBoundary) {
Server svr;
svr.set_mount_point("/mount2", "./www2");
svr.set_mount_point("/", "./www");
auto port = svr.bind_to_any_port(HOST);
auto listen_thread = std::thread([&svr]() { svr.listen_after_bind(); });
auto se = detail::scope_exit([&] {
svr.stop();
listen_thread.join();
ASSERT_FALSE(svr.is_running());
});
svr.wait_until_ready();
Client cli(HOST, port);
auto res = cli.Get("/mount2/dir/test.html");
ASSERT_TRUE(res) << "Error: " << to_string(res.error());
EXPECT_EQ(StatusCode::OK_200, res->status);
// "/mount2" must not match part-way through a path segment.
res = cli.Get("/mount2dir/test.html");
ASSERT_TRUE(res) << "Error: " << to_string(res.error());
EXPECT_EQ(StatusCode::NotFound_404, res->status);
// A mount point ending in '/' keeps matching every path below it.
res = cli.Get("/dir/test.html");
ASSERT_TRUE(res) << "Error: " << to_string(res.error());
EXPECT_EQ(StatusCode::OK_200, res->status);
}
TEST(MountTest, Redicect) {
Server svr;