Browse Source

Add fix for the approve() mitigation.

Mikko Ohtamaa 8 years ago
parent
commit
a3446507ec
1 changed files with 7 additions and 0 deletions
  1. 7 0
      contracts/token/StandardToken.sol

+ 7 - 0
contracts/token/StandardToken.sol

@@ -29,6 +29,13 @@ contract StandardToken is BasicToken, ERC20 {
   }
 
   function approve(address _spender, uint _value) {
+
+    // To change the approve amount you first have to reduce the addresses`
+    //  allowance to zero by calling `approve(_spender,0)` if it is not
+    //  already 0 to mitigate the race condition described here:
+    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
+    if ((_amount!=0) && (allowed[msg.sender][_spender] !=0)) throw;
+
     allowed[msg.sender][_spender] = _value;
     Approval(msg.sender, _spender, _value);
   }