From 08ab63837efc6695eb3f6a3fe518e97000a41022 Mon Sep 17 00:00:00 2001 From: ttyS3 Date: Fri, 6 Sep 2024 14:12:33 +0000 Subject: [PATCH] fix(archive): handle invalid UTF-8 passwords in 7z decompression --- src/archive/sevenz.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/archive/sevenz.rs b/src/archive/sevenz.rs index c8be7a1..b1e6959 100644 --- a/src/archive/sevenz.rs +++ b/src/archive/sevenz.rs @@ -194,16 +194,24 @@ pub fn list_archive( Ok(true) }; - match password { + let result = match password { Some(password) => { + let password = match password.to_str() { + Ok(p) => p, + Err(_) => return vec![Err(Error::InvalidPassword("7z requires that all passwords are valid UTF-8"))].into_iter(), + }; sevenz_rust::decompress_with_extract_fn_and_password( reader, ".", - sevenz_rust::Password::from(password.to_str().unwrap()), + sevenz_rust::Password::from(password), entry_extract_fn, - ).unwrap() + ) }, - None => sevenz_rust::decompress_with_extract_fn(reader, ".", entry_extract_fn).unwrap(), + None => sevenz_rust::decompress_with_extract_fn(reader, ".", entry_extract_fn), + }; + + if let Err(e) = result { + return vec![Err(e.into())].into_iter(); } files.into_iter()