Merge branch 'mmap-map-failed-guard' of github.com:metsw24-max/cpp-httplib into metsw24-max-mmap-map-failed-guard

This commit is contained in:
yhirose
2026-08-01 22:16:28 -04:00
2 changed files with 26 additions and 0 deletions
+9
View File
@@ -5576,6 +5576,15 @@ inline bool mmap::open(const char *path) {
is_open_empty_file = true;
return false;
}
// A failed mapping must not be left in `addr_`: `is_open()` only compares it
// against nullptr, so the MAP_FAILED sentinel would pass and `data()` would
// hand the caller (const char *)-1.
if (addr_ == MAP_FAILED) {
addr_ = nullptr;
close();
return false;
}
#endif
return true;
+17
View File
@@ -9346,6 +9346,23 @@ TEST(MmapTest, OpenWhileFileHeldForWriting) {
}
#endif
#ifndef _WIN32
// A failed ::mmap must not be reported as an open mapping. is_open() only
// compares addr_ against nullptr, so the MAP_FAILED sentinel used to pass it
// and data() handed the caller (const char *)-1. A directory opens and stats
// fine but has no mapping, so ::mmap fails for it.
TEST(MmapTest, FailedMappingIsNotOpen) {
const char *path = "./mmap_failed_mapping_test_dir";
ASSERT_EQ(0, ::mkdir(path, 0755));
auto dir_cleanup = detail::scope_exit([&] { ::rmdir(path); });
detail::mmap m(path);
EXPECT_FALSE(m.is_open());
EXPECT_NE(static_cast<const void *>(m.data()),
static_cast<const void *>(MAP_FAILED));
}
#endif
TEST(KeepAliveTest, ReadTimeout) {
Server svr;