diff --git a/Cargo.lock b/Cargo.lock index 7a5074b..15f51f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,6 +163,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + [[package]] name = "criterion" version = "0.7.0" @@ -289,6 +298,17 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "flate2" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +dependencies = [ + "crc32fast", + "libz-rs-sys", + "miniz_oxide", +] + [[package]] name = "futures-core" version = "0.3.31" @@ -423,6 +443,15 @@ dependencies = [ "libc", ] +[[package]] +name = "libz-rs-sys" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" +dependencies = [ + "zlib-rs", +] + [[package]] name = "mach2" version = "0.4.3" @@ -445,6 +474,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -561,7 +591,7 @@ dependencies = [ "criterion", "dirs-next", "fancy-regex", - "miniz_oxide", + "flate2", "mmap-rs", "pathdiff", "radix_trie", @@ -789,6 +819,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "slab" version = "0.4.11" @@ -1129,3 +1165,9 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zlib-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" diff --git a/Cargo.toml b/Cargo.toml index c8a543c..0be1dfd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ repository = "https://github.com/yarnpkg/pnp-rs" byteorder = "1" concurrent_lru = "^0.2" fancy-regex = { version = "^0.16.2", default-features = false, features = ["std"] } -miniz_oxide = "^0.8" +flate2 = { version = "1.1", default-features = false, features = ["zlib-rs"] } mmap-rs = { version = "^0.7.0", optional = true } pathdiff = "^0.2" radix_trie = "0.3.0" diff --git a/src/zip.rs b/src/zip.rs index e8577d9..8091c30 100644 --- a/src/zip.rs +++ b/src/zip.rs @@ -4,6 +4,7 @@ use std::{ }; use byteorder::{LittleEndian, ReadBytesExt}; +use flate2::read::DeflateDecoder; use rustc_hash::{FxHashMap, FxHashSet}; use crate::fs::FileType; @@ -80,8 +81,11 @@ where match entry.compression { Compression::Deflate => { - let decompressed_data = miniz_oxide::inflate::decompress_to_vec(slice) - .map_err(|_| std::io::Error::other("Error during decompression"))?; + let mut decoder = DeflateDecoder::new(slice); + let mut decompressed_data = Vec::new(); + decoder.read_to_end(&mut decompressed_data).map_err(|e| { + std::io::Error::other(format!("Error during decompression: {e}")) + })?; Ok(decompressed_data) }