aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/compress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zencore/compress.cpp')
-rw-r--r--src/zencore/compress.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/zencore/compress.cpp b/src/zencore/compress.cpp
index d9f381811..84af83119 100644
--- a/src/zencore/compress.cpp
+++ b/src/zencore/compress.cpp
@@ -1995,8 +1995,15 @@ CompressedBuffer::CopyRange(uint64_t RawOffset, uint64_t RawSize) const
UniqueBuffer RawHeaderData;
if (ReadHeader(CompressedData, Header, &RawHeaderData))
{
- const uint64_t TotalRawSize = RawSize < ~uint64_t(0) ? RawSize : Header.TotalRawSize - RawOffset;
- Range.CompressedData = CopyCompressedRange(Header, RawHeaderData.GetView(), CompressedData, RawOffset, TotalRawSize);
+ if (RawOffset < Header.TotalRawSize)
+ {
+ const uint64_t MaxRawSize = RawOffset == ~uint64_t(0) ? Header.TotalRawSize : Header.TotalRawSize - RawOffset;
+ const uint64_t TotalRawSize = RawSize == ~uint64_t(0) ? MaxRawSize : Min(RawSize, MaxRawSize);
+ if (TotalRawSize > 0)
+ {
+ Range.CompressedData = CopyCompressedRange(Header, RawHeaderData.GetView(), CompressedData, RawOffset, TotalRawSize);
+ }
+ }
}
}
return Range;
@@ -2012,8 +2019,16 @@ CompressedBuffer::GetRange(uint64_t RawOffset, uint64_t RawSize) const
UniqueBuffer RawHeaderData;
if (ReadHeader(CompressedData, Header, &RawHeaderData))
{
- const uint64_t TotalRawSize = RawSize < ~uint64_t(0) ? RawSize : Header.TotalRawSize - RawOffset;
- Range.CompressedData = GetCompressedRange(Header, RawHeaderData.GetView(), CompressedData, RawOffset, TotalRawSize);
+ if (RawOffset < Header.TotalRawSize)
+ {
+ const uint64_t MaxRawSize = RawOffset == ~uint64_t(0) ? Header.TotalRawSize : Header.TotalRawSize - RawOffset;
+ const uint64_t TotalRawSize = RawSize == ~uint64_t(0) ? MaxRawSize : Min(RawSize, MaxRawSize);
+
+ if (TotalRawSize > 0)
+ {
+ Range.CompressedData = GetCompressedRange(Header, RawHeaderData.GetView(), CompressedData, RawOffset, TotalRawSize);
+ }
+ }
}
}
return Range;