diff --git a/pallas-network/src/miniprotocols/txmonitor/codec.rs b/pallas-network/src/miniprotocols/txmonitor/codec.rs index 15da33c..0bbc5b8 100644 --- a/pallas-network/src/miniprotocols/txmonitor/codec.rs +++ b/pallas-network/src/miniprotocols/txmonitor/codec.rs @@ -80,14 +80,19 @@ impl<'b> Decode<'b, ()> for Message { // find the specs 4 => Ok(Message::AwaitAcquire), 5 => Ok(Message::RequestNextTx), - 6 => match d.datatype()? { - pallas_codec::minicbor::data::Type::Array - | pallas_codec::minicbor::data::Type::ArrayIndef => { - let tx = d.decode()?; - Ok(Message::ResponseNextTx(Some(tx))) - } - _ => Ok(Message::ResponseNextTx(None)), - }, + 6 => match d.datatype() { + Ok(datatype) => { + match datatype { + pallas_codec::minicbor::data::Type::Array + | pallas_codec::minicbor::data::Type::ArrayIndef => { + let tx = d.decode()?; + Ok(Message::ResponseNextTx(Some(tx))) + } + _ => Ok(Message::ResponseNextTx(None)) + } + }, + Err(_) => Ok(Message::ResponseNextTx(None)) + } 7 => { let id = d.decode()?; Ok(Message::RequestHasTx(id)) @@ -130,4 +135,15 @@ pub mod tests { unreachable!(); } } + #[test] + fn test_empty_next_tx_response() { + let bytes = vec![129, 6]; + let msg: super::Message = pallas_codec::minicbor::decode(&bytes).unwrap(); + + if let super::Message::ResponseNextTx(None) = msg { + assert_eq!(0u64, 0u64); + } else { + unreachable!(); + } + } }