From 3887169db0c53c0deaeac5ae00b5a79de87473ea Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" <75863576+jeffwashington@users.noreply.github.com> Date: Tue, 27 Apr 2021 09:56:18 -0500 Subject: [PATCH] lamports += to checked_add (#16841) --- programs/vote/src/vote_state/mod.rs | 4 +++- runtime/src/bank.rs | 9 ++++++--- runtime/src/message_processor.rs | 11 ++++++++--- runtime/src/system_instruction_processor.rs | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index cb21e424a1..210ac3dbc1 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -686,7 +686,9 @@ pub fn withdraw( _ => (), } vote_account.try_account_ref_mut()?.lamports -= lamports; - to_account.try_account_ref_mut()?.lamports += lamports; + to_account + .try_account_ref_mut()? + .checked_add_lamports(lamports)?; Ok(()) } diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 7a575d4aa5..980f676145 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -5449,7 +5449,10 @@ pub(crate) mod tests { if let Ok(instruction) = bincode::deserialize(data) { match instruction { MockInstruction::Deduction => { - keyed_accounts[1].account.borrow_mut().lamports += 1; + keyed_accounts[1] + .account + .borrow_mut() + .checked_add_lamports(1)?; keyed_accounts[2].account.borrow_mut().lamports -= 1; Ok(()) } @@ -9868,7 +9871,7 @@ pub(crate) mod tests { let mut to_account = keyed_accounts[1].try_account_ref_mut()?; let mut dup_account = keyed_accounts[2].try_account_ref_mut()?; dup_account.lamports -= lamports; - to_account.lamports += lamports; + to_account.checked_add_lamports(lamports).unwrap(); } keyed_accounts[0] .try_account_ref_mut()? @@ -10359,7 +10362,7 @@ pub(crate) mod tests { let keyed_accounts = invoke_context.get_keyed_accounts()?; assert_eq!(42, keyed_accounts[0].lamports().unwrap()); let mut account = keyed_accounts[0].try_account_ref_mut()?; - account.lamports += 1; + account.checked_add_lamports(1)?; Ok(()) } diff --git a/runtime/src/message_processor.rs b/runtime/src/message_processor.rs index 4d420ac77f..51a550f2c7 100644 --- a/runtime/src/message_processor.rs +++ b/runtime/src/message_processor.rs @@ -1828,7 +1828,10 @@ mod tests { MockSystemInstruction::Correct => Ok(()), MockSystemInstruction::AttemptCredit { lamports } => { keyed_accounts[0].account.borrow_mut().lamports -= lamports; - keyed_accounts[1].account.borrow_mut().lamports += lamports; + keyed_accounts[1] + .account + .borrow_mut() + .checked_add_lamports(lamports)?; Ok(()) } // Change data in a read-only account @@ -2005,11 +2008,13 @@ mod tests { let mut to_account = keyed_accounts[1].try_account_ref_mut()?; let mut dup_account = keyed_accounts[2].try_account_ref_mut()?; dup_account.lamports -= lamports; - to_account.lamports += lamports; + to_account.checked_add_lamports(lamports)?; dup_account.set_data(vec![data]); } keyed_accounts[0].try_account_ref_mut()?.lamports -= lamports; - keyed_accounts[1].try_account_ref_mut()?.lamports += lamports; + keyed_accounts[1] + .try_account_ref_mut()? + .checked_add_lamports(lamports)?; Ok(()) } } diff --git a/runtime/src/system_instruction_processor.rs b/runtime/src/system_instruction_processor.rs index a11031b820..74236ba5dd 100644 --- a/runtime/src/system_instruction_processor.rs +++ b/runtime/src/system_instruction_processor.rs @@ -190,7 +190,7 @@ fn transfer_verified( } from.try_account_ref_mut()?.lamports -= lamports; - to.try_account_ref_mut()?.lamports += lamports; + to.try_account_ref_mut()?.checked_add_lamports(lamports)?; Ok(()) }