diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 464fc104d8..56c40a7324 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -25,6 +25,7 @@ use solana_sdk::{ instruction::CompiledInstruction, message::{Message, MessageHeader}, pubkey::Pubkey, + sanitize::Sanitize, signature::Signature, transaction::{Result, Transaction, TransactionError}, }; @@ -557,7 +558,7 @@ impl EncodedTransaction { } } pub fn decode(&self) -> Option { - match self { + let transaction: Option = match self { EncodedTransaction::Json(_) => None, EncodedTransaction::LegacyBinary(blob) => bs58::decode(blob) .into_vec() @@ -575,7 +576,8 @@ impl EncodedTransaction { | UiTransactionEncoding::Json | UiTransactionEncoding::JsonParsed => None, }, - } + }; + transaction.filter(|transaction| transaction.sanitize().is_ok()) } } @@ -594,6 +596,20 @@ pub struct TransactionByAddrInfo { mod test { use super::*; + #[test] + fn test_decode_invalid_transaction() { + // This transaction will not pass sanitization + let unsanitary_transaction = EncodedTransaction::Binary( + "ju9xZWuDBX4pRxX2oZkTjxU5jB4SSTgEGhX8bQ8PURNzyzqKMPPpNvWihx8zUe\ + FfrbVNoAaEsNKZvGzAnTDy5bhNT9kt6KFCTBixpvrLCzg4M5UdFUQYrn1gdgjX\ + pLHxcaShD81xBNaFDgnA2nkkdHnKtZt4hVSfKAmw3VRZbjrZ7L2fKZBx21CwsG\ + hD6onjM2M3qZW5C8J6d1pj41MxKmZgPBSha3MyKkNLkAGFASK" + .to_string(), + UiTransactionEncoding::Base58, + ); + assert!(unsanitary_transaction.decode().is_none()); + } + #[test] fn test_satisfies_commitment() { let status = TransactionStatus {