contracts/chequebook: fix two contract issues (#15086)

This patch fixes the following issues:

* The contract executes send() when it does not have enough balance.
* The contract always sends a total amount of zero.
This commit is contained in:
Derek Chiang 2017-09-25 01:36:13 -07:00 committed by Felix Lange
parent 9feec51e2d
commit d6a6180366

View File

@ -27,10 +27,11 @@ contract chequebook is mortal {
if(owner != ecrecover(hash, sig_v, sig_r, sig_s)) return; if(owner != ecrecover(hash, sig_v, sig_r, sig_s)) return;
// Attempt sending the difference between the cumulative amount on the cheque // Attempt sending the difference between the cumulative amount on the cheque
// and the cumulative amount on the last cashed cheque to beneficiary. // and the cumulative amount on the last cashed cheque to beneficiary.
if (amount - sent[beneficiary] >= this.balance) { uint256 diff = amount - sent[beneficiary];
if (diff <= this.balance) {
// update the cumulative amount before sending // update the cumulative amount before sending
sent[beneficiary] = amount; sent[beneficiary] = amount;
if (!beneficiary.send(amount - sent[beneficiary])) { if (!beneficiary.send(diff)) {
// Upon failure to execute send, revert everything // Upon failure to execute send, revert everything
throw; throw;
} }