Skip to content

Commit

Permalink
Fix minicbor serialize returning number of written bytes correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
MathiasKoch committed Nov 21, 2024
1 parent f942b03 commit 7e7eab8
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
12 changes: 8 additions & 4 deletions src/provisioning/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,11 +206,13 @@ impl FleetProvisioner {
Ok(match payload_format {
#[cfg(feature = "provision_cbor")]
PayloadFormat::Cbor => {
let mut serializer = minicbor_serde::Serializer::new(buf);
let mut serializer = minicbor_serde::Serializer::new(
minicbor::encode::write::Cursor::new(buf),
);
register_request
.serialize(&mut serializer)
.map_err(|_| EncodingError::BufferSize)?;
serializer.into_encoder().writer().len()
serializer.into_encoder().writer().position()
}
PayloadFormat::Json => serde_json_core::to_slice(&register_request, buf)
.map_err(|_| EncodingError::BufferSize)?,
Expand Down Expand Up @@ -317,11 +319,13 @@ impl FleetProvisioner {
Ok(match payload_format {
#[cfg(feature = "provision_cbor")]
PayloadFormat::Cbor => {
let mut serializer = minicbor_serde::Serializer::new(buf);
let mut serializer = minicbor_serde::Serializer::new(
minicbor::encode::write::Cursor::new(buf),
);
request
.serialize(&mut serializer)
.map_err(|_| EncodingError::BufferSize)?;
serializer.into_encoder().writer().len()
serializer.into_encoder().writer().position()
}
PayloadFormat::Json => serde_json_core::to_slice(&request, buf)
.map_err(|_| EncodingError::BufferSize)?,
Expand Down
6 changes: 4 additions & 2 deletions src/shadows/dao.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,15 @@ where

let buf = &mut [0u8; S::MAX_PAYLOAD_SIZE + U32_SIZE];

let mut serializer = minicbor_serde::Serializer::new(&mut buf[U32_SIZE..]);
let mut serializer = minicbor_serde::Serializer::new(minicbor::encode::write::Cursor::new(
&mut buf[U32_SIZE..],
));

state
.serialize(&mut serializer)
.map_err(|_| Error::InvalidPayload)?;

let len = serializer.into_encoder().writer().len();
let len = serializer.into_encoder().writer().position();

if len > S::MAX_PAYLOAD_SIZE {
return Err(Error::Overflow);
Expand Down

0 comments on commit 7e7eab8

Please sign in to comment.