diff options
| author | coco875 <pereira.jannin@gmail.com> | 2025-12-22 18:05:01 +0100 |
|---|---|---|
| committer | Lywx <kiritodev01@gmail.com> | 2025-12-22 11:21:52 -0600 |
| commit | d0c1112405a9ff49aa04ff9173b25acd1dde8440 (patch) | |
| tree | 5b1107dc2aebf7c7389d4bc2ddc6ec3125ef4cfe /src/utils | |
| parent | 15f7373dd0d59b2fc1dd880ac679f68c888e1a7e (diff) | |
avoid goes beyond limit when decompressing
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/Decompressor.cpp | 6 |
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, |
