fix: Handle undefined CBOR maps in Plutus data (#196)

This commit is contained in:
Santiago Carmuega 2022-10-13 15:51:49 -03:00 committed by GitHub
parent 2a176723bf
commit 7a73ebc5b2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 3 deletions

View file

@ -946,7 +946,9 @@ impl<'b, C> minicbor::decode::Decode<'b, C> for PlutusData {
| minicbor::data::Type::I16
| minicbor::data::Type::I32
| minicbor::data::Type::I64 => Ok(Self::BigInt(d.decode_with(ctx)?)),
minicbor::data::Type::Map => Ok(Self::Map(d.decode_with(ctx)?)),
minicbor::data::Type::Map | minicbor::data::Type::MapIndef => {
Ok(Self::Map(d.decode_with(ctx)?))
}
minicbor::data::Type::Bytes => Ok(Self::BoundedBytes(d.decode_with(ctx)?)),
minicbor::data::Type::BytesIndef => {
let mut full = Vec::new();
@ -1219,8 +1221,12 @@ impl<'b, C> minicbor::Decode<'b, C> for Metadatum {
}
minicbor::data::Type::Bytes => Ok(Metadatum::Bytes(d.decode_with(ctx)?)),
minicbor::data::Type::String => Ok(Metadatum::Text(d.decode_with(ctx)?)),
minicbor::data::Type::Array => Ok(Metadatum::Array(d.decode_with(ctx)?)),
minicbor::data::Type::Map => Ok(Metadatum::Map(d.decode_with(ctx)?)),
minicbor::data::Type::Array | minicbor::data::Type::ArrayIndef => {
Ok(Metadatum::Array(d.decode_with(ctx)?))
}
minicbor::data::Type::Map | minicbor::data::Type::MapIndef => {
Ok(Metadatum::Map(d.decode_with(ctx)?))
}
_ => Err(minicbor::decode::Error::message(
"Can't turn data type into metadatum",
)),

View file

@ -597,6 +597,8 @@ mod tests {
include_str!("../../../test_data/babbage4.block"),
// peculiar block with i32 overlfow
include_str!("../../../test_data/babbage5.block"),
// peculiar block with map undef in plutus data
include_str!("../../../test_data/babbage6.block"),
];
for (idx, block_str) in test_blocks.iter().enumerate() {