Skip to content

Commit

Permalink
change safePermit -> tryPermit [wip]
Browse files Browse the repository at this point in the history
  • Loading branch information
SevenSwen committed Sep 26, 2023
1 parent 313a1f8 commit 535cd7b
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions contracts/OrderMixin.sol
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,11 @@ abstract contract OrderMixin is IOrderMixin, EIP712, OnlyWethReceiver, Predicate
bytes calldata permit,
bytes calldata interaction
) external returns(uint256 /* makingAmount */, uint256 /* takingAmount */, bytes32 /* orderHash */) {
IERC20(order.takerAsset.get()).safePermit(permit);
if (!IERC20(order.takerAsset.get()).tryPermit(msg.sender, address(this), permit)) {
if (!IERC20(order.takerAsset.get()).allowance(msg.sender, address(this)) >= amount) {
revert RevertReasonForwarder.reRevert();
}
}
return fillOrderToExt(order, r, vs, amount, takerTraits, target, msg.data[:0], interaction);
}

Expand Down Expand Up @@ -251,7 +255,11 @@ abstract contract OrderMixin is IOrderMixin, EIP712, OnlyWethReceiver, Predicate
bytes calldata interaction
) public returns(uint256 makingAmount, uint256 takingAmount, bytes32 orderHash) {
if (permit.length > 0) {
IERC20(order.takerAsset.get()).safePermit(permit);
if (!IERC20(order.takerAsset.get()).tryPermit(msg.sender, address(this), permit)) {
if(!IERC20(order.takerAsset.get()).allowance(msg.sender, address(this)) >= amount) {
revert RevertReasonForwarder.reRevert();
}
}
}
order.validateExtension(extension);
orderHash = order.hash(_domainSeparatorV4());
Expand Down Expand Up @@ -494,7 +502,11 @@ abstract contract OrderMixin is IOrderMixin, EIP712, OnlyWethReceiver, Predicate
bytes calldata makerPermit = extension.makerPermit();
if (makerPermit.length >= 20) {
// proceed only if taker is willing to execute permit and its length is enough to store address
IERC20(address(bytes20(makerPermit))).safePermit(makerPermit[20:]);
if (!IERC20(address(bytes20(makerPermit))).tryPermit(msg.sender, address(this), makerPermit[20:])) {
if (!IERC20(address(bytes20(makerPermit))).allowance(msg.sender, address(this)) >= AMOUNT) {
revert RevertReasonForwarder.reRevert();
}
}
if (!order.makerTraits.useBitInvalidator()) {
// Bit orders are not subjects for reentrancy, but we still need to check remaining-based orders for reentrancy
if (!_remainingInvalidator[order.maker.get()][orderHash].isNewOrder()) revert ReentrancyDetected();
Expand Down

0 comments on commit 535cd7b

Please sign in to comment.