In FestivalPass::withdraw function, transfer() is used for native ETH withdrawal. The transfer() and send() functions forward a fixed amount of 2300 gas. If target address is an smart contract which contains an recieve() or fallback() function, the withdraw function will fail
Likelihood: medium
Impact: low
Additionally, using higher than 2300 gas might be mandatory for some multisig wallets.
The use of the deprecated transfer() function for an address will inevitably make the transaction fail.
claimer smart contract does not implement a payable function, it can fail
claimer smart contract does implement a payable fallback which uses more than 2300 gas unit, it can fail
claimer smart contract implements a payable fallback function that needs less than 2300 gas units but is called through proxy, raising the call's gas usage above 2300, it can fail
Add the below test in ./test/FestivalPass.t.sol and to check the output run the command forge test --mt test_withdraw_targetIsContract -vvvv
The below test depicts that if target is set to be an contract, can fail the withdraw function
Instead of transfer function for withdrawal, we can use call function
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.