From c25e128f3a9ff395263f3d107cbb6f059cda67d2 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Fri, 30 Sep 2022 15:31:52 +0200 Subject: Handle zero size file mapping (#177) * Handle edgecase with zero size memory mapping of file * changelog --- zencore/iobuffer.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'zencore') diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp index 37ef57c2d..177b7dfb6 100644 --- a/zencore/iobuffer.cpp +++ b/zencore/iobuffer.cpp @@ -267,9 +267,18 @@ IoBufferExtendedCore::Materialize() const if (m_Flags.load(std::memory_order_relaxed) & kIsMaterialized) return; - void* NewMmapHandle; uint32_t NewFlags = kIsMaterialized; + if (m_DataBytes == 0) + { + m_Flags.fetch_or(NewFlags, std::memory_order_release); + // Fake a "valid" pointer, nobody should read this as size is zero + m_DataPtr = reinterpret_cast(&m_MmapHandle); + return; + } + + void* NewMmapHandle; + const uint64_t MapOffset = m_FileOffset & ~0xffffull; const uint64_t MappedOffsetDisplacement = m_FileOffset - MapOffset; const uint64_t MapSize = m_DataBytes + MappedOffsetDisplacement; -- cgit v1.2.3