diff --git a/Cargo.lock b/Cargo.lock index 5a25c96ef..524779903 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -199,7 +199,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "miniz_oxide", - "object", + "object 0.32.2", "rustc-demangle", ] @@ -617,17 +617,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "difflib" version = "0.4.0" @@ -1692,6 +1681,15 @@ name = "object" version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "flate2", "memchr", @@ -2517,12 +2515,10 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.5.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +checksum = "fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f" dependencies = [ - "byteorder", - "derive_more", "twox-hash", ] @@ -2606,7 +2602,7 @@ dependencies = [ "mime", "nix 0.28.0", "number_prefix", - "object", + "object 0.36.7", "once_cell", "opendal", "openssl", @@ -3454,7 +3450,7 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "static_assertions", ] diff --git a/Cargo.toml b/Cargo.toml index e45ddac0e..a7a77cf6b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,7 +63,7 @@ memchr = "2" memmap2 = "0.9.4" mime = "0.3" number_prefix = "0.4" -object = "0.32" +object = "0.36" once_cell = "1.19" opendal = { version = "0.52.0", optional = true, default-features = false } openssl = { version = "0.10.64", optional = true } diff --git a/src/util.rs b/src/util.rs index 4f031de1b..4f062d3b3 100644 --- a/src/util.rs +++ b/src/util.rs @@ -17,7 +17,8 @@ use blake3::Hasher as blake3_Hasher; use byteorder::{BigEndian, ByteOrder}; use fs::File; use fs_err as fs; -use object::{macho, read::archive::ArchiveFile, read::macho::FatArch}; +use object::read::archive::ArchiveFile; +use object::read::macho::{FatArch, MachOFatFile32, MachOFatFile64}; use serde::{Deserialize, Serialize}; use std::cell::Cell; use std::ffi::{OsStr, OsString}; @@ -356,20 +357,19 @@ pub async fn hash_all_archives( let archive_mmap = unsafe { memmap2::MmapOptions::new().map_copy_read_only(&archive_file)? }; - match macho::FatHeader::parse(&*archive_mmap) { - Ok(h) if h.magic.get(object::endian::BigEndian) == macho::FAT_MAGIC => { - for arch in macho::FatHeader::parse_arch32(&*archive_mmap)? { - hash_regular_archive(&mut m, arch.data(&*archive_mmap)?)?; - } + if let Ok(fat) = MachOFatFile32::parse(&*archive_mmap) { + for arch in fat.arches() { + hash_regular_archive(&mut m, arch.data(&*archive_mmap)?)?; } - Ok(h) if h.magic.get(object::endian::BigEndian) == macho::FAT_MAGIC_64 => { - for arch in macho::FatHeader::parse_arch64(&*archive_mmap)? { - hash_regular_archive(&mut m, arch.data(&*archive_mmap)?)?; - } + } else if let Ok(fat) = MachOFatFile64::parse(&*archive_mmap) { + for arch in fat.arches() { + hash_regular_archive(&mut m, arch.data(&*archive_mmap)?)?; } + } else { // Not a FatHeader at all, regular archive. - _ => hash_regular_archive(&mut m, &archive_mmap)?, + hash_regular_archive(&mut m, &archive_mmap)?; } + Ok(m.finish()) }) });