aboutsummaryrefslogtreecommitdiff
path: root/zencore/compress.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-11-18 14:33:44 +0100
committerStefan Boberg <[email protected]>2021-11-18 14:33:44 +0100
commite53df312f3c4dcef19add9cd26afc324557b1f5a (patch)
treea3d7b59f29e484d48edffb2a26bbb0dd2d95533d /zencore/compress.cpp
parentgc: implemented timestamped snapshot persistence (diff)
parentChange error code for failed upsteam apply (diff)
downloadzen-e53df312f3c4dcef19add9cd26afc324557b1f5a.tar.xz
zen-e53df312f3c4dcef19add9cd26afc324557b1f5a.zip
merge from main
Diffstat (limited to 'zencore/compress.cpp')
-rw-r--r--zencore/compress.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/zencore/compress.cpp b/zencore/compress.cpp
index dd6484a3c..35a5acb3a 100644
--- a/zencore/compress.cpp
+++ b/zencore/compress.cpp
@@ -8,7 +8,7 @@
#include <zencore/endian.h>
#include <zencore/testing.h>
-#include "../3rdparty/Oodle/include/oodle2.h"
+#include "../thirdparty/Oodle/include/oodle2.h"
#if ZEN_PLATFORM_WINDOWS
# pragma comment(lib, "oo2core_win64.lib")
#endif
@@ -693,6 +693,11 @@ ValidBufferOrEmpty(BufferType&& CompressedData)
CompositeBuffer
CopyCompressedRange(const BufferHeader& Header, const CompositeBuffer& CompressedData, uint64_t RawOffset, uint64_t RawSize)
{
+ if (Header.TotalRawSize < RawOffset + RawSize)
+ {
+ return CompositeBuffer();
+ }
+
if (Header.Method == CompressionMethod::None)
{
UniqueBuffer NewCompressedData = UniqueBuffer::Alloc(RawSize);
@@ -862,9 +867,11 @@ CompressedBuffer
CompressedBuffer::CopyRange(uint64_t RawOffset, uint64_t RawSize) const
{
using namespace detail;
- const BufferHeader Header = BufferHeader::Read(CompressedData);
- CompressedBuffer Range;
- Range.CompressedData = CopyCompressedRange(Header, CompressedData, RawOffset, RawSize);
+ const BufferHeader Header = BufferHeader::Read(CompressedData);
+ const uint64_t TotalRawSize = RawSize < ~uint64_t(0) ? RawSize : Header.TotalRawSize - RawOffset;
+
+ CompressedBuffer Range;
+ Range.CompressedData = CopyCompressedRange(Header, CompressedData, RawOffset, TotalRawSize);
return Range;
}