Replaces unchecked integer arithmetic by guarded versions. (#21186)
This commit is contained in:
committed by
GitHub
parent
b4d09388aa
commit
067e29ae0b
@ -300,8 +300,9 @@ impl<'a> InvokeContext for ThisInvokeContext<'a> {
|
||||
.try_borrow_mut()
|
||||
.map_err(|_| InstructionError::AccountBorrowOutstanding)?;
|
||||
}
|
||||
let pre_account = &self.pre_accounts[unique_index];
|
||||
let account = self.accounts[account_index].1.borrow();
|
||||
self.pre_accounts[unique_index]
|
||||
pre_account
|
||||
.verify(
|
||||
program_id,
|
||||
message.is_writable(account_index, demote_program_write_locks),
|
||||
@ -315,13 +316,17 @@ impl<'a> InvokeContext for ThisInvokeContext<'a> {
|
||||
ic_logger_msg!(
|
||||
self.logger,
|
||||
"failed to verify account {}: {}",
|
||||
self.pre_accounts[unique_index].key(),
|
||||
pre_account.key(),
|
||||
err
|
||||
);
|
||||
err
|
||||
})?;
|
||||
pre_sum += u128::from(self.pre_accounts[unique_index].lamports());
|
||||
post_sum += u128::from(account.lamports());
|
||||
pre_sum = pre_sum
|
||||
.checked_add(u128::from(pre_account.lamports()))
|
||||
.ok_or(InstructionError::UnbalancedInstruction)?;
|
||||
post_sum = post_sum
|
||||
.checked_add(u128::from(account.lamports()))
|
||||
.ok_or(InstructionError::UnbalancedInstruction)?;
|
||||
Ok(())
|
||||
};
|
||||
instruction.visit_each_account(&mut work)?;
|
||||
@ -383,8 +388,12 @@ impl<'a> InvokeContext for ThisInvokeContext<'a> {
|
||||
ic_logger_msg!(logger, "failed to verify account {}: {}", key, err);
|
||||
err
|
||||
})?;
|
||||
pre_sum += u128::from(pre_account.lamports());
|
||||
post_sum += u128::from(account.lamports());
|
||||
pre_sum = pre_sum
|
||||
.checked_add(u128::from(pre_account.lamports()))
|
||||
.ok_or(InstructionError::UnbalancedInstruction)?;
|
||||
post_sum = post_sum
|
||||
.checked_add(u128::from(account.lamports()))
|
||||
.ok_or(InstructionError::UnbalancedInstruction)?;
|
||||
if is_writable && !pre_account.executable() {
|
||||
pre_account.update(&account);
|
||||
}
|
||||
@ -466,10 +475,10 @@ impl<'a> InvokeContext for ThisInvokeContext<'a> {
|
||||
execute_us: u64,
|
||||
deserialize_us: u64,
|
||||
) {
|
||||
self.timings.serialize_us += serialize_us;
|
||||
self.timings.create_vm_us += create_vm_us;
|
||||
self.timings.execute_us += execute_us;
|
||||
self.timings.deserialize_us += deserialize_us;
|
||||
self.timings.serialize_us = self.timings.serialize_us.saturating_add(serialize_us);
|
||||
self.timings.create_vm_us = self.timings.create_vm_us.saturating_add(create_vm_us);
|
||||
self.timings.execute_us = self.timings.execute_us.saturating_add(execute_us);
|
||||
self.timings.deserialize_us = self.timings.deserialize_us.saturating_add(deserialize_us);
|
||||
}
|
||||
fn get_sysvars(&self) -> &[(Pubkey, Vec<u8>)] {
|
||||
self.sysvars
|
||||
@ -664,6 +673,7 @@ mod tests {
|
||||
ModifyReadonly,
|
||||
}
|
||||
|
||||
#[allow(clippy::integer_arithmetic)]
|
||||
fn mock_process_instruction(
|
||||
first_instruction_account: usize,
|
||||
data: &[u8],
|
||||
|
Reference in New Issue
Block a user