diff --git a/Cargo.lock b/Cargo.lock index 100efa1..39347dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,12 +11,6 @@ dependencies = [ "libc", ] -[[package]] -name = "arbitrary-int" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825297538d77367557b912770ca3083f778a196054b3ee63b22673c4a3cae0a5" - [[package]] name = "arbitrary-int" version = "2.0.0" @@ -44,11 +38,10 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bitbybit" -version = "1.4.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec187a89ab07e209270175faf9e07ceb2755d984954e58a2296e325ddece2762" +checksum = "71d2a3353d70ac1091a33cbf31fc7e77b19091538a7e306e3740712af19807ca" dependencies = [ - "arbitrary-int 1.3.0", "proc-macro2", "quote", "syn", @@ -534,7 +527,7 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" name = "spacepackets" version = "0.17.0" dependencies = [ - "arbitrary-int 2.0.0", + "arbitrary-int", "bitbybit", "chrono", "crc", diff --git a/src/ecss/tc.rs b/src/ecss/tc.rs index 83a4902..0597d10 100644 --- a/src/ecss/tc.rs +++ b/src/ecss/tc.rs @@ -57,10 +57,6 @@ use delegate::delegate; use serde::{Deserialize, Serialize}; use zerocopy::{FromBytes, IntoBytes}; -// Is necessary for some reason, possibly bug. -#[cfg(feature = "defmt")] -use arbitrary_int::traits::Integer; - #[cfg(feature = "alloc")] use alloc::vec::Vec; diff --git a/src/lib.rs b/src/lib.rs index dc0160e..f880ce5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -690,8 +690,8 @@ impl SpacePacketHeader { expected: CCSDS_HEADER_LEN, }); } - // Unwrap okay, this can not fail. - let zc_header = zc::SpHeader::read_from_bytes(&buf[0..Self::LENGTH]).unwrap(); + let zc_header = zc::SpHeader::read_from_bytes(&buf[0..Self::LENGTH]) + .expect("zerocopy read failed unexpectedly"); Ok((Self::from(zc_header), &buf[Self::LENGTH..])) } @@ -1571,7 +1571,16 @@ impl<'buf> CcsdsPacketReader<'buf> { buf: &'buf [u8], checksum_type: Option, ) -> Result { - let sp_header = SpHeader::from_be_bytes(&buf[0..CCSDS_HEADER_LEN])?.0; + if buf.len() < CCSDS_HEADER_LEN { + return Err(ByteConversionError::FromSliceTooSmall { + found: buf.len(), + expected: CCSDS_HEADER_LEN, + } + .into()); + } + let sp_header = SpHeader::from_be_bytes(&buf[0..CCSDS_HEADER_LEN]) + .expect("SP header creation failed unexpectedly") + .0; if sp_header.packet_len() > buf.len() { return Err(ByteConversionError::FromSliceTooSmall { found: buf.len(), @@ -2354,6 +2363,15 @@ pub(crate) mod tests { assert_eq!(buf[12], 0); } + #[test] + fn test_ccsds_reader_fails_on_small_buf() { + let buf: [u8; 5] = [0; 5]; + for size in 0..5 { + let reader = CcsdsPacketReader::new(&buf[0..size], None); + assert!(reader.is_err()); + } + } + #[test] fn test_ccsds_creator_creation_empty_user_data_no_checksum() { let mut buf: [u8; 32] = [0; 32]; diff --git a/src/uslp/mod.rs b/src/uslp/mod.rs index 90a50fa..4d6d53a 100644 --- a/src/uslp/mod.rs +++ b/src/uslp/mod.rs @@ -312,7 +312,7 @@ impl PartialEq for PrimaryHeader { /// USLP protocol ID (UPID) enumeration. /// -/// See https://sanaregistry.org/r/uslp_protocol_id/ for the source of this information. +/// See for the source of this information. #[derive(Debug, PartialEq, Eq, num_enum::TryFromPrimitive, num_enum::IntoPrimitive)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]