diff --git a/programs/system/src/lib.rs b/programs/system/src/lib.rs index f85697bbc0..d130c1c9a7 100644 --- a/programs/system/src/lib.rs +++ b/programs/system/src/lib.rs @@ -36,15 +36,21 @@ pub fn entrypoint( Err(ProgramError::InvalidArgument)?; } - if space > 0 - && (!keyed_accounts[to].account.userdata.is_empty() - || !system_program::check_id(&keyed_accounts[to].account.owner)) + if !keyed_accounts[to].account.userdata.is_empty() + || !system_program::check_id(&keyed_accounts[to].account.owner) { - info!( - "CreateAccount: invalid argument space: {} accounts.userdata.len(): {}", - space, - keyed_accounts[to].account.userdata.len(), - ); + if space > 0 { + info!( + "CreateAccount: invalid argument space: {} accounts.userdata.len(): {}", + space, + keyed_accounts[to].account.userdata.len(), + ); + } else { + info!( + "CreateAccount: invalid argument; account {} already in use", + keyed_accounts[to].unsigned_key() + ); + } Err(ProgramError::InvalidArgument)?; } if tokens > keyed_accounts[from].account.tokens { diff --git a/programs/system/tests/system.rs b/programs/system/tests/system.rs index 1379c7d7e5..ab16e126e1 100644 --- a/programs/system/tests/system.rs +++ b/programs/system/tests/system.rs @@ -59,9 +59,9 @@ fn test_create_cannot_overwrite_used_account() { ); // create_account on an initialized account should fail - system_bank + assert!(system_bank .create_account(&from_keypair, other_account, 100) - .unwrap(); + .is_err()); assert_eq!(system_bank.bank.get_balance(&other_account), 1); assert_eq!( system_bank.bank.get_account(&other_account).unwrap().owner,