summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorcoco875 <pereira.jannin@gmail.com>2025-12-22 18:05:01 +0100
committerLywx <kiritodev01@gmail.com>2025-12-22 11:21:52 -0600
commitd0c1112405a9ff49aa04ff9173b25acd1dde8440 (patch)
tree5b1107dc2aebf7c7389d4bc2ddc6ec3125ef4cfe /src/utils
parent15f7373dd0d59b2fc1dd880ac679f68c888e1a7e (diff)
avoid goes beyond limit when decompressing
Diffstat (limited to 'src/utils')
-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,