From 1f9c5f8ba54a075e22c0b1d3fa153aa7dadac2eb Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 15 May 2023 19:11:30 +0200 Subject: added IoBuffer.mmap test case this verifies that attempting to map a range outside the underlying file fails. Posix appears to offer different semantics so it silently accepts it still however. --- src/zencore/iobuffer.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/zencore') diff --git a/src/zencore/iobuffer.cpp b/src/zencore/iobuffer.cpp index 3aca0cfa7..6a4b56be6 100644 --- a/src/zencore/iobuffer.cpp +++ b/src/zencore/iobuffer.cpp @@ -680,6 +680,33 @@ TEST_CASE("IoBuffer") zen::IoBuffer buffer3(buffer2, 0, buffer2.Size()); } +TEST_CASE("IoBuffer.mmap") +{ + zen::IoBuffer Buffer1{65536}; + uint8_t* Mutate = Buffer1.MutableData(); + memcpy(Mutate, "abc123", 6); + zen::WriteFile("test_file.data", Buffer1); + + SUBCASE("in-range") + { + zen::IoBuffer FileBuffer = IoBufferBuilder::MakeFromFile("test_file.data", 0, 65536); + const void* Data = FileBuffer.GetData(); + CHECK(Data != nullptr); + CHECK_EQ(memcmp(Data, "abc123", 6), 0); + } + + // Linux/MacOS offers different semantics when calling mmap with out-of-range so + // for now let's ignore whether that makes sense or not +# if ZEN_PLATFORM_WINDOWS + SUBCASE("out-of-range") + { + zen::IoBuffer FileBuffer = IoBufferBuilder::MakeFromFile("test_file.data", 131072, 65536); + const void* Data = nullptr; + CHECK_THROWS(Data = FileBuffer.GetData()); + CHECK(Data == nullptr); + } +# endif +} #endif } // namespace zen -- cgit v1.2.3