diff --git a/local-cluster/tests/local_cluster.rs b/local-cluster/tests/local_cluster.rs index d2536829c..9562d4cf5 100644 --- a/local-cluster/tests/local_cluster.rs +++ b/local-cluster/tests/local_cluster.rs @@ -1316,10 +1316,11 @@ fn test_fake_shreds_broadcast_leader() { fn test_faulty_node(faulty_node_type: BroadcastStageType) { solana_logger::setup(); let num_nodes = 2; - let validator_config = ValidatorConfig::default(); let mut error_validator_config = ValidatorConfig::default(); error_validator_config.broadcast_stage_type = faulty_node_type; - let mut validator_configs = vec![validator_config; num_nodes - 1]; + let mut validator_configs = Vec::with_capacity(num_nodes - 1); + validator_configs.resize_with(num_nodes - 1, ValidatorConfig::default); + // Push a faulty_bootstrap = vec![error_validator_config]; validator_configs.insert(0, error_validator_config); let node_stakes = vec![300, 100]; diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index b1ab3b9f3..f0b3b37b1 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -459,7 +459,7 @@ fn test_program_bpf_invoke() { let mut programs = Vec::new(); #[cfg(feature = "bpf_c")] { - programs.push((Languages::C, "invoke", "invoked")); + programs.push((Languages::C, "invoke", "invoked", "noop")); } #[cfg(feature = "bpf_rust")] { @@ -467,6 +467,7 @@ fn test_program_bpf_invoke() { Languages::Rust, "solana_bpf_rust_invoke", "solana_bpf_rust_invoked", + "solana_bpf_rust_noop", )); } for program in programs.iter() { @@ -487,6 +488,8 @@ fn test_program_bpf_invoke() { load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.1); let invoked_program_id = load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.2); + let noop_program_id = + load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.3); let argument_keypair = Keypair::new(); let account = Account::new(42, 100, &invoke_program_id); @@ -529,7 +532,12 @@ fn test_program_bpf_invoke() { &[TEST_SUCCESS, bump_seed1, bump_seed2, bump_seed3], account_metas.clone(), ); - let message = Message::new(&[instruction], Some(&mint_pubkey)); + let noop_instruction = Instruction::new( + noop_program_id, + &(), + vec![] + ); + let message = Message::new(&[instruction, noop_instruction], Some(&mint_pubkey)); let tx = Transaction::new( &[ &mint_keypair, @@ -582,6 +590,12 @@ fn test_program_bpf_invoke() { }; assert_eq!(invoked_programs, expected_invoked_programs); + let no_invoked_programs: Vec = inner_instructions[1] + .iter() + .map(|ix| message.account_keys[ix.program_id_index as usize].clone()) + .collect(); + assert_eq!(no_invoked_programs.len(), 0); + // failure cases let instruction = Instruction::new( diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index a6466f7b7..cd298debe 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -2437,10 +2437,10 @@ impl Bank { Self::accounts_to_refcells(accounts, loaders); let instruction_recorders = if enable_cpi_recording { - Some(vec![ - InstructionRecorder::default(); - tx.message.instructions.len() - ]) + let ix_count = tx.message.instructions.len(); + let mut recorders = Vec::with_capacity(ix_count); + recorders.resize_with(ix_count, InstructionRecorder::default); + Some(recorders) } else { None };