Skip to content

Commit

Permalink
Update zip dependency and fix deprecation warnings (#3617)
Browse files Browse the repository at this point in the history
Update zip crate to latest version, and fix deprecation warnings
using functionally equivalent APIs
  • Loading branch information
GeneFerneau committed Apr 13, 2021
1 parent f8afdb5 commit 1b8acee
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 12 deletions.
33 changes: 24 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion util/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ serde_derive = "1"
log4rs = { version = "0.12", features = ["rolling_file_appender", "compound_policy", "size_trigger", "fixed_window_roller"] }
log = "0.4"
walkdir = "2"
zip = { version = "0.5", default-features = false }
zip = { version = "0.5.11", default-features = false }
parking_lot = "0.10"
zeroize = { version = "1.1", features =["zeroize_derive"] }

Expand Down
19 changes: 17 additions & 2 deletions util/src/zip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,21 @@ use std::thread;
use self::zip_rs::write::FileOptions;
use zip as zip_rs;

// Sanitize file path for normal components, excluding '/', '..', and '.'
// From private function in zip crate
fn path_to_string(path: &std::path::Path) -> String {
let mut path_str = String::new();
for component in path.components() {
if let std::path::Component::Normal(os_str) = component {
if !path_str.is_empty() {
path_str.push('/');
}
path_str.push_str(&*os_str.to_string_lossy());
}
}
path_str
}

/// Create a zip archive from source dir and list of relative file paths.
/// Permissions are set to 644 by default.
pub fn create_zip(dst_file: &File, src_dir: &Path, files: Vec<PathBuf>) -> io::Result<()> {
Expand All @@ -37,7 +52,7 @@ pub fn create_zip(dst_file: &File, src_dir: &Path, files: Vec<PathBuf>) -> io::R
let file_path = src_dir.join(x);
if let Ok(file) = File::open(file_path.clone()) {
info!("compress: {:?} -> {:?}", file_path, x);
writer.get_mut().start_file_from_path(x, options)?;
writer.get_mut().start_file(path_to_string(x), options)?;
io::copy(&mut BufReader::new(file), &mut writer)?;
// Flush the BufWriter after each file so we start then next one correctly.
writer.flush()?;
Expand All @@ -57,7 +72,7 @@ pub fn extract_files(from_archive: File, dest: &Path, files: Vec<PathBuf>) -> io
let mut archive = zip_rs::ZipArchive::new(from_archive).expect("archive file exists");
for x in files {
if let Ok(file) = archive.by_name(x.to_str().expect("valid path")) {
let path = dest.join(file.sanitized_name());
let path = dest.join(file.mangled_name());
let parent_dir = path.parent().expect("valid parent dir");
fs::create_dir_all(&parent_dir).expect("create parent dir");
let outfile = fs::File::create(&path).expect("file created");
Expand Down

0 comments on commit 1b8acee

Please sign in to comment.