summaryrefslogtreecommitdiff
path: root/src/utils/Decompressor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/Decompressor.cpp')
-rw-r--r--src/utils/Decompressor.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/utils/Decompressor.cpp b/src/utils/Decompressor.cpp
index f69872b..dd24650 100644
--- a/src/utils/Decompressor.cpp
+++ b/src/utils/Decompressor.cpp
@@ -123,7 +123,8 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector<uint8_t>
offset = ASSET_PTR(offset);
auto decoded = Decode(buffer, fileOffset, type);
- auto size = node["size"] ? node["size"].as<size_t>() : manualSize.value_or(decoded->size - offset);
+ auto availableSize = decoded->size - offset;
+ auto size = node["size"] ? node["size"].as<size_t>() : std::min(manualSize.value_or(availableSize), availableSize);
return {
.root = decoded,
.segment = { decoded->data + offset, size }
@@ -135,7 +136,8 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector<uint8_t>
{
fileOffset = TranslateAddr(offset, false);
- auto size = node["size"] ? node["size"].as<size_t>() : manualSize.value_or(buffer.size() - fileOffset);
+ auto availableSize = buffer.size() - fileOffset;
+ auto size = node["size"] ? node["size"].as<size_t>() : std::min(manualSize.value_or(availableSize), availableSize);
return {
.root = nullptr,