diff --git a/src/transaction.rs b/src/transaction.rs index dda9581e2..4080d11be 100644 --- a/src/transaction.rs +++ b/src/transaction.rs @@ -93,9 +93,7 @@ pub fn test_tx() -> Transaction { let keypair1 = KeyPair::new(); let pubkey1 = keypair1.pubkey(); let zero = Hash::default(); - let mut tr = Transaction::new(&keypair1, pubkey1, 42, zero); - tr.sign(&keypair1); - return tr; + Transaction::new(&keypair1, pubkey1, 42, zero) } #[cfg(test)] @@ -169,14 +167,17 @@ mod tests { } #[test] - fn test_bad_event_signature() { + fn test_token_attack() { let zero = Hash::default(); let keypair = KeyPair::new(); let pubkey = keypair.pubkey(); let mut tr = Transaction::new(&keypair, pubkey, 42, zero); - tr.sign(&keypair); - tr.data.tokens = 1_000_000; // <-- attack! - assert!(!tr.verify_plan()); + tr.data.tokens = 1_000_000; // <-- attack, part 1! + if let Plan::Pay(ref mut payment) = tr.data.plan { + payment.tokens = tr.data.tokens; // <-- attack, part 2! + }; + assert!(tr.verify_plan()); + assert!(!tr.verify_sig()); } #[test] @@ -187,7 +188,6 @@ mod tests { let pubkey1 = keypair1.pubkey(); let zero = Hash::default(); let mut tr = Transaction::new(&keypair0, pubkey1, 42, zero); - tr.sign(&keypair0); if let Plan::Pay(ref mut payment) = tr.data.plan { payment.to = thief_keypair.pubkey(); // <-- attack! };