Commit b14c9f4b by Nicolás Venturo

Fix SafeERC20.safeApprove bug, improve test coverage.

parent fc17a1d9
...@@ -32,7 +32,7 @@ contract ERC20FailingMock { ...@@ -32,7 +32,7 @@ contract ERC20FailingMock {
} }
contract ERC20SucceedingMock { contract ERC20SucceedingMock {
uint256 private _allowance; mapping (address => uint256) private _allowances;
// IERC20's functions are not pure, but these mock implementations are: to prevent Solidity from issuing warnings, // IERC20's functions are not pure, but these mock implementations are: to prevent Solidity from issuing warnings,
// we write to a dummy state variable. // we write to a dummy state variable.
...@@ -54,11 +54,11 @@ contract ERC20SucceedingMock { ...@@ -54,11 +54,11 @@ contract ERC20SucceedingMock {
} }
function setAllowance(uint256 allowance_) public { function setAllowance(uint256 allowance_) public {
_allowance = allowance_; _allowances[msg.sender] = allowance_;
} }
function allowance(address, address) public view returns (uint256) { function allowance(address owner, address) public view returns (uint256) {
return _allowance; return _allowances[owner];
} }
} }
......
...@@ -24,7 +24,7 @@ library SafeERC20 { ...@@ -24,7 +24,7 @@ library SafeERC20 {
// safeApprove should only be called when setting an initial allowance, // safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use // or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require((value == 0) || (token.allowance(msg.sender, spender) == 0)); require((value == 0) || (token.allowance(address(this), spender) == 0));
require(token.approve(spender, value)); require(token.approve(spender, value));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment