Fix detect function panic

This commit is contained in:
2026-04-12 16:50:29 +08:00
parent acbd18a3f6
commit 8f59064239

View File

@@ -306,33 +306,32 @@ fn parse_name_info(name: &str) -> Result<NameInfo> {
name name
)); ));
} }
let name = name.as_bytes();
let prefix = &name[..3]; let prefix = &name[..3];
if !prefix.eq_ignore_ascii_case("res") { if !prefix.eq_ignore_ascii_case(b"res") {
return Err(anyhow::anyhow!( return Err(anyhow::anyhow!(
"Filename '{}' does not start with 'res'.", "Filename '{:#?}' does not start with 'res'.",
name name
)); ));
} }
let suffix = &name[name.len() - 4..]; 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!( return Err(anyhow::anyhow!(
"Filename '{}' does not end with '.grp'.", "Filename '{:#?}' does not end with '.grp'.",
name name
)); ));
} }
let digits = &name[3..name.len() - 4]; 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!( return Err(anyhow::anyhow!(
"Filename '{}' does not contain a numeric sequence.", "Filename '{:#?}' does not contain a numeric sequence.",
name name
)); ));
} }
let arc_num = digits.parse::<u32>().with_context(|| { let arc_num = std::str::from_utf8(digits)
format!( .with_context(|| format!("Failed to parse archive number from '{:#?}' (digits '{:#?}').", name, digits))?
"Failed to parse archive number from '{}' (digits '{}').", .parse::<u32>()
name, digits .with_context(|| format!("Failed to parse archive number from '{:#?}' (digits '{:#?}').", name, digits))?;
)
})?;
Ok(NameInfo { Ok(NameInfo {
digits_offset: 3, digits_offset: 3,
digits_len: digits.len(), digits_len: digits.len(),