From 8f590642393f5dd2ed1e8a83aa0054eb6e65bb24 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sun, 12 Apr 2026 16:50:29 +0800 Subject: [PATCH] Fix detect function panic --- src/scripts/ex_hibit/arc/grp.rs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/scripts/ex_hibit/arc/grp.rs b/src/scripts/ex_hibit/arc/grp.rs index 54f09d7..6e0f468 100644 --- a/src/scripts/ex_hibit/arc/grp.rs +++ b/src/scripts/ex_hibit/arc/grp.rs @@ -306,33 +306,32 @@ fn parse_name_info(name: &str) -> Result { name )); } + let name = name.as_bytes(); let prefix = &name[..3]; - if !prefix.eq_ignore_ascii_case("res") { + if !prefix.eq_ignore_ascii_case(b"res") { return Err(anyhow::anyhow!( - "Filename '{}' does not start with 'res'.", + "Filename '{:#?}' does not start with 'res'.", name )); } let suffix = &name[name.len() - 4..]; - if !suffix.eq_ignore_ascii_case(".grp") { + if !suffix.eq_ignore_ascii_case(b".grp") { return Err(anyhow::anyhow!( - "Filename '{}' does not end with '.grp'.", + "Filename '{:#?}' does not end with '.grp'.", name )); } let digits = &name[3..name.len() - 4]; - if digits.is_empty() || !digits.chars().all(|c| c.is_ascii_digit()) { + if digits.is_empty() || !digits.iter().all(|c| c.is_ascii_digit()) { return Err(anyhow::anyhow!( - "Filename '{}' does not contain a numeric sequence.", + "Filename '{:#?}' does not contain a numeric sequence.", name )); } - let arc_num = digits.parse::().with_context(|| { - format!( - "Failed to parse archive number from '{}' (digits '{}').", - name, digits - ) - })?; + let arc_num = std::str::from_utf8(digits) + .with_context(|| format!("Failed to parse archive number from '{:#?}' (digits '{:#?}').", name, digits))? + .parse::() + .with_context(|| format!("Failed to parse archive number from '{:#?}' (digits '{:#?}').", name, digits))?; Ok(NameInfo { digits_offset: 3, digits_len: digits.len(),