diff options
| -rw-r--r-- | CHANGELOG.md | 2 | ||||
| -rw-r--r-- | src/zencore/compactbinaryvalidation.cpp | 13 | ||||
| -rw-r--r-- | src/zencore/iobuffer.cpp | 4 |
3 files changed, 16 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dc0050f3..93ea90d45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## - Bugfix: If we get a request for a partial chunk that can not be fulfilled we warn and treat it as a miss - Bugfix: Correctly calculate memory view size from Mid/MidInline function if size is not given +- Bugfix: Don't try to read bytes to validate a compact binary object that is empty +- Bugfix: Don't fake free memory buffer pointer when materializing a zero size file - Improvement: Asserts gives an immediate ERROR log entry with callstack and reason - Improvement: Asserts flushes the log before sending error report to Sentry - Improvement: Refactored IterateChunks to allow reuse in diskcachelayer and hide public GetBlockFile() function in BlockStore diff --git a/src/zencore/compactbinaryvalidation.cpp b/src/zencore/compactbinaryvalidation.cpp index 462978f63..db830d250 100644 --- a/src/zencore/compactbinaryvalidation.cpp +++ b/src/zencore/compactbinaryvalidation.cpp @@ -544,10 +544,17 @@ ValidateCompactBinary(MemoryView View, CbValidateMode Mode, CbFieldType Type) CbValidateError Error = CbValidateError::None; if (EnumHasAnyFlags(Mode, CbValidateMode::All)) { - ValidateCbField(View, Mode, Error, Type); - if (!View.IsEmpty() && EnumHasAnyFlags(Mode, CbValidateMode::Padding)) + if (View.IsEmpty()) { - AddError(Error, CbValidateError::Padding); + AddError(Error, CbValidateError::OutOfBounds); + } + else + { + ValidateCbField(View, Mode, Error, Type); + if (!View.IsEmpty() && EnumHasAnyFlags(Mode, CbValidateMode::Padding)) + { + AddError(Error, CbValidateError::Padding); + } } } return Error; diff --git a/src/zencore/iobuffer.cpp b/src/zencore/iobuffer.cpp index e1e8750a1..fd99a01cb 100644 --- a/src/zencore/iobuffer.cpp +++ b/src/zencore/iobuffer.cpp @@ -212,6 +212,10 @@ IoBufferExtendedCore::~IoBufferExtendedCore() m_DataPtr = nullptr; // prevent any buffer deallocation attempts } + else if (m_DataPtr == reinterpret_cast<uint8_t*>(&m_MmapHandle)) + { + m_DataPtr = nullptr; + } const uint32_t LocalFlags = m_Flags.load(std::memory_order_relaxed); #if ZEN_PLATFORM_WINDOWS |