From f2990eec66b773310c80fb8fb38eeb2d45ce3136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Mon, 25 Mar 2024 14:23:43 +0000 Subject: [PATCH] Attempt to invoke a buffer before it is used in a deployment --- runtime/src/bank/tests.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/runtime/src/bank/tests.rs b/runtime/src/bank/tests.rs index 6b670bae55dba0..175e29c2f40e78 100644 --- a/runtime/src/bank/tests.rs +++ b/runtime/src/bank/tests.rs @@ -7238,6 +7238,28 @@ fn test_bpf_loader_upgradeable_deploy_with_max_len() { &bpf_loader_upgradeable::id(), ); + // Test buffer invocation + bank.store_account(&buffer_address, &buffer_account); + let instruction = Instruction::new_with_bytes(buffer_address, &[], Vec::new()); + let message = Message::new(&[instruction], Some(&mint_keypair.pubkey())); + let transaction = Transaction::new(&[&binding], message, bank.last_blockhash()); + assert_eq!( + bank.process_transaction(&transaction), + Err(TransactionError::InstructionError( + 0, + InstructionError::InvalidAccountData, + )), + ); + { + let program_cache = bank.transaction_processor.program_cache.read().unwrap(); + let slot_versions = program_cache.get_slot_versions_for_tests(&buffer_address); + assert_eq!(slot_versions.len(), 1); + assert!(matches!( + slot_versions[0].program, + LoadedProgramType::Closed, + )); + } + // Test successful deploy let payer_base_balance = LAMPORTS_PER_SOL; let deploy_fees = {