From 7e7eab84fe3a4c9b582d3c929469b033dd54b1fb Mon Sep 17 00:00:00 2001 From: Mathias Date: Thu, 21 Nov 2024 13:26:44 +0100 Subject: [PATCH] Fix minicbor serialize returning number of written bytes correctly --- src/provisioning/mod.rs | 12 ++++++++---- src/shadows/dao.rs | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/provisioning/mod.rs b/src/provisioning/mod.rs index 3797208..e0bcd95 100644 --- a/src/provisioning/mod.rs +++ b/src/provisioning/mod.rs @@ -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(®ister_request, buf) .map_err(|_| EncodingError::BufferSize)?, @@ -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)?, diff --git a/src/shadows/dao.rs b/src/shadows/dao.rs index abbb85f..b170688 100644 --- a/src/shadows/dao.rs +++ b/src/shadows/dao.rs @@ -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);