diff options
| author | Dan Engelbrecht <[email protected]> | 2022-09-30 15:31:52 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-09-30 06:31:52 -0700 |
| commit | c25e128f3a9ff395263f3d107cbb6f059cda67d2 (patch) | |
| tree | 5ca4f2e21512acf97232558b943adac51a3b4970 /zencore/iobuffer.cpp | |
| parent | De/reduce buffer creation in parsepackedmessage (#175) (diff) | |
| download | zen-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.cpp | 11 |
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; |