Skip to content

Commit c49ce3f

Browse files
committed
fix decoding error (caught by fuzz test)
1 parent 93b12bc commit c49ce3f

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/transaction.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,9 @@ impl Decodable for TxIn {
521521
}
522522
if has_issuance {
523523
issuance = AssetIssuance::consensus_decode(&mut d)?;
524+
if issuance.is_null() {
525+
return Err(encode::Error::ParseFailed("superfluous asset issuance"));
526+
}
524527
} else {
525528
issuance = AssetIssuance::default();
526529
}
@@ -2299,4 +2302,14 @@ mod tests {
22992302
");
23002303
assert!(tx.input[0].previous_output.is_null());
23012304
}
2305+
2306+
#[test]
2307+
fn superfluous_asset_issuance() {
2308+
let tx = Vec::<u8>::from_hex("1ae80068000109fee1000000000000000000000000000000000000000000000000000000000000005acf37f60000c7280028a7000000006e000000010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010115190000b9bfb80000000100000000d8d8d8d8d8d8d8d8d8d8d8d8d8d80000000000b8bfb8").unwrap();
2309+
if let encode::Error::ParseFailed("superfluous asset issuance") = Transaction::consensus_decode(&tx[..]).unwrap_err() {
2310+
// ok. FIXME replace this with matches! when we move to 1.48.0
2311+
} else {
2312+
panic!("Incorrect error for bad transaction");
2313+
}
2314+
}
23022315
}

0 commit comments

Comments
 (0)