aboutsummaryrefslogtreecommitdiff
path: root/zencore/iobuffer.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-09-30 15:31:52 +0200
committerGitHub <[email protected]>2022-09-30 06:31:52 -0700
commitc25e128f3a9ff395263f3d107cbb6f059cda67d2 (patch)
tree5ca4f2e21512acf97232558b943adac51a3b4970 /zencore/iobuffer.cpp
parentDe/reduce buffer creation in parsepackedmessage (#175) (diff)
downloadzen-c25e128f3a9ff395263f3d107cbb6f059cda67d2.tar.xz
zen-c25e128f3a9ff395263f3d107cbb6f059cda67d2.zip
Handle zero size file mapping (#177)
* Handle edgecase with zero size memory mapping of file * changelog
Diffstat (limited to 'zencore/iobuffer.cpp')
-rw-r--r--zencore/iobuffer.cpp11
1 files changed, 10 insertions, 1 deletions
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<uint8_t*>(&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;