diff --git a/programs/bpf/rust/invoke/src/processor.rs b/programs/bpf/rust/invoke/src/processor.rs index 6b48cdda9..d466ee9eb 100644 --- a/programs/bpf/rust/invoke/src/processor.rs +++ b/programs/bpf/rust/invoke/src/processor.rs @@ -396,9 +396,9 @@ fn process_instruction( ); // put the relavant account at the end of a larger account list let mut reordered_accounts = accounts.to_vec(); - let ai = reordered_accounts.remove(FROM_INDEX); + let account_info = reordered_accounts.remove(FROM_INDEX); reordered_accounts.push(accounts[0].clone()); - reordered_accounts.push(ai); + reordered_accounts.push(account_info); invoke(&instruction, &reordered_accounts)?; } } diff --git a/programs/bpf_loader/src/syscalls.rs b/programs/bpf_loader/src/syscalls.rs index 98569626f..0144debd2 100644 --- a/programs/bpf_loader/src/syscalls.rs +++ b/programs/bpf_loader/src/syscalls.rs @@ -2041,18 +2041,14 @@ where // index starts at first instruction account index - keyed_accounts.len().saturating_sub(orig_data_lens.len()) }) + .and_then(|index| { + if index >= orig_data_lens.len() { + None + } else { + Some(index) + } + }) { - if orig_data_len_index >= orig_data_lens.len() { - ic_msg!( - invoke_context, - "Internal error: index mismatch for account {}", - account_key - ); - return Err(SyscallError::InstructionError( - InstructionError::MissingAccount, - ) - .into()); - } caller_account.original_data_len = orig_data_lens[orig_data_len_index]; } else { ic_msg!( @@ -2065,6 +2061,7 @@ where ) .into()); } + Some(caller_account) } else { None