From ba1789f10607f5a6cba5863128d31f776b8e59cc Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 10 Feb 2026 08:57:00 +0000 Subject: fix: обработка выхода за пределы индекса сортировки в архиве и улучшение декодирования LZSS с поддержкой XOR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/nres/src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'crates/nres/src/lib.rs') diff --git a/crates/nres/src/lib.rs b/crates/nres/src/lib.rs index 0cd9e22..1fa3b39 100644 --- a/crates/nres/src/lib.rs +++ b/crates/nres/src/lib.rs @@ -111,7 +111,9 @@ impl Archive { let mut high = self.entries.len(); while low < high { let mid = low + (high - low) / 2; - let target_idx = self.entries[mid].meta.sort_index as usize; + let Ok(target_idx) = usize::try_from(self.entries[mid].meta.sort_index) else { + break; + }; if target_idx >= self.entries.len() { break; } @@ -396,7 +398,10 @@ fn parse_archive(bytes: &[u8], raw_mode: bool) -> Result<(Vec, u64) name }, }; - return Ok((vec![entry], bytes.len() as u64)); + return Ok(( + vec![entry], + u64::try_from(bytes.len()).map_err(|_| Error::IntegerOverflow)?, + )); } if bytes.len() < 16 { -- cgit v1.2.3