diff options
| author | Stefan Boberg <[email protected]> | 2021-11-18 14:33:44 +0100 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-11-18 14:33:44 +0100 |
| commit | e53df312f3c4dcef19add9cd26afc324557b1f5a (patch) | |
| tree | a3d7b59f29e484d48edffb2a26bbb0dd2d95533d /zencore/compress.cpp | |
| parent | gc: implemented timestamped snapshot persistence (diff) | |
| parent | Change error code for failed upsteam apply (diff) | |
| download | zen-e53df312f3c4dcef19add9cd26afc324557b1f5a.tar.xz zen-e53df312f3c4dcef19add9cd26afc324557b1f5a.zip | |
merge from main
Diffstat (limited to 'zencore/compress.cpp')
| -rw-r--r-- | zencore/compress.cpp | 15 |
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; } |