Merge pull request 'add length check for CCSDS reader' (#213) from add-len-check-ccsds-reader into main
Reviewed-on: #213
This commit was merged in pull request #213.
This commit is contained in:
Generated
+3
-10
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
+21
-3
@@ -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<ChecksumType>,
|
||||
) -> Result<Self, CcsdsPacketReadError> {
|
||||
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];
|
||||
|
||||
+1
-1
@@ -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 <https://sanaregistry.org/r/uslp_protocol_id/> 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))]
|
||||
|
||||
Reference in New Issue
Block a user