From e1da54d75b9d7e5c8c99a1d8bd11ce52a4e8362c Mon Sep 17 00:00:00 2001 From: jake <77554505+brxken128@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:07:10 +0100 Subject: [PATCH] Fix metadata/preview media sizes for 32-bit targets (#446) replace `usize` with `u64` for md/pvm lengths Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com> --- crates/crypto/src/header/metadata.rs | 10 +++++++--- crates/crypto/src/header/preview_media.rs | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/crates/crypto/src/header/metadata.rs b/crates/crypto/src/header/metadata.rs index 8b30d993e..01f64a1a1 100644 --- a/crates/crypto/src/header/metadata.rs +++ b/crates/crypto/src/header/metadata.rs @@ -174,7 +174,10 @@ impl Metadata { metadata.extend_from_slice(&self.algorithm.serialize()); // 4 metadata.extend_from_slice(&self.metadata_nonce); // 24 max metadata.extend_from_slice(&vec![0u8; 24 - self.metadata_nonce.len()]); // 28 - metadata.extend_from_slice(&self.metadata.len().to_le_bytes()); // 36 total bytes + + let metadata_len = self.metadata.len() as u64; + + metadata.extend_from_slice(&metadata_len.to_le_bytes()); // 36 total bytes metadata.extend_from_slice(&self.metadata); // this can vary in length metadata } @@ -210,9 +213,10 @@ impl Metadata { let mut metadata_length = [0u8; 8]; reader.read(&mut metadata_length).map_err(Error::Io)?; - let metadata_length: usize = usize::from_le_bytes(metadata_length); + let metadata_length = u64::from_le_bytes(metadata_length); - let mut metadata = vec![0u8; metadata_length]; + #[allow(clippy::cast_possible_truncation)] + let mut metadata = vec![0u8; metadata_length as usize]; reader.read(&mut metadata).map_err(Error::Io)?; let metadata = Self { diff --git a/crates/crypto/src/header/preview_media.rs b/crates/crypto/src/header/preview_media.rs index 9d316a2f6..91cd28605 100644 --- a/crates/crypto/src/header/preview_media.rs +++ b/crates/crypto/src/header/preview_media.rs @@ -161,7 +161,10 @@ impl PreviewMedia { preview_media.extend_from_slice(&self.algorithm.serialize()); // 4 preview_media.extend_from_slice(&self.media_nonce); // 24 max preview_media.extend_from_slice(&vec![0u8; 24 - self.media_nonce.len()]); // 28 total bytes - preview_media.extend_from_slice(&self.media.len().to_le_bytes()); // 36 total bytes + + let media_len = self.media.len() as u64; + + preview_media.extend_from_slice(&media_len.to_le_bytes()); // 36 total bytes preview_media.extend_from_slice(&self.media); // this can vary in length preview_media } @@ -198,9 +201,10 @@ impl PreviewMedia { let mut media_length = [0u8; 8]; reader.read(&mut media_length).map_err(Error::Io)?; - let media_length: usize = usize::from_le_bytes(media_length); + let media_length = u64::from_le_bytes(media_length); - let mut media = vec![0u8; media_length]; + #[allow(clippy::cast_possible_truncation)] + let mut media = vec![0u8; media_length as usize]; reader.read(&mut media).map_err(Error::Io)?; let preview_media = Self {