When msg.sender
is a contract, calling the withdraw
function with the _tokenAddress
input being wrappedNativeToken
can revert if msg.sender
's receive
function consumes more than 2300 gas. Thus, such msg.sender
would not be able to claim the corresponding claimAbleAmount
that it is entitled to.
The following withdraw
function executes payable(msg.sender).transfer(claimAbleAmount)
if _tokenAddress == wrappedNativeToken
is true
in which such transfer
function call would forward 2300 gas. When msg.sender
is a smart contract, its receive
function can contain complex logics that consume more than 2300 gas. In this case, calling such receive
function reverts due to insufficient gas so the withdraw
function call reverts as well.
When calling the withdraw
function reverts, the msg.sender
fails to claim the corresponding claimAbleAmount
that it is entitled to.
Manual Review
https://github.com/Cyfrin/2024-08-tadle/blob/c249cdb68c37c47025cdc4c4782c8ee3f20a5b98/src/core/TokenManager.sol#L169 can be updated to the following code.
Invalid, known issues [Medium-2](https://github.com/Cyfrin/2024-08-tadle/issues/1)
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.