diff --git a/Cargo.lock b/Cargo.lock index 39954e9a8..84b0a5809 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,11 +37,11 @@ checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -77,6 +77,12 @@ dependencies = [ "cc", ] +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + [[package]] name = "cpp_demangle" version = "0.5.1" @@ -88,9 +94,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" dependencies = [ "libc", ] @@ -106,21 +112,21 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" dependencies = [ - "generic-array", - "typenum", + "hybrid-array", ] [[package]] name = "digest" -version = "0.10.7" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" dependencies = [ "block-buffer", + "const-oid", "crypto-common", ] @@ -186,16 +192,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "getrandom" version = "0.3.4" @@ -252,6 +248,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hybrid-array" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8655f91cd07f2b9d0c24137bd650fe69617773435ee5ec83022377777ce65ef1" +dependencies = [ + "typenum", +] + [[package]] name = "id-arena" version = "2.3.0" @@ -586,9 +591,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures", @@ -715,12 +720,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "wasip2" version = "1.0.2+wasi-0.2.9" diff --git a/Cargo.toml b/Cargo.toml index 89510512c..0f4022c40 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ prost = "0.14.0" prost-build = "0.14.0" rustc-demangle = "0.1" serde_json = "1" -sha2 = "0.10" +sha2 = "0.11" tempfile = "3" thiserror = "2" zstd = "0.13.0" diff --git a/rust-crates/symblib/src/fileid.rs b/rust-crates/symblib/src/fileid.rs index cb1473cc9..a0a5770a6 100644 --- a/rust-crates/symblib/src/fileid.rs +++ b/rust-crates/symblib/src/fileid.rs @@ -6,7 +6,6 @@ use base64::Engine; use sha2::digest::FixedOutput; use sha2::Digest as _; -use std::io::Read as _; use std::{fmt, fs, io, path}; /// Size of the head and tail blocks used for partially hashing ELF files. @@ -44,12 +43,17 @@ impl FileId { // Hash first 4096 bytes. stream.seek(io::SeekFrom::Start(0))?; - io::copy(&mut stream.by_ref().take(PARTIAL_HASH_SIZE), &mut hasher)?; + let mut buf = [0u8; 4096]; + let to_read = (PARTIAL_HASH_SIZE as usize).min(buf.len()); + let n = stream.read(&mut buf[..to_read])?; + hasher.update(&buf[..n]); // Hash last 4096 bytes. let tail_start = stream_len.saturating_sub(PARTIAL_HASH_SIZE); stream.seek(io::SeekFrom::Start(tail_start))?; - io::copy(&mut stream.by_ref().take(PARTIAL_HASH_SIZE), &mut hasher)?; + let to_read = (PARTIAL_HASH_SIZE as usize).min(buf.len()); + let n = stream.read(&mut buf[..to_read])?; + hasher.update(&buf[..n]); // Hash length. hasher.update(u64::to_be_bytes(stream_len));