The _mint, _handleReturn and _cancelFlow functions use try/catch blocks. In the try block there is a call of the refundExecutionFee function to return Execution Fee to the deposit owner, but there is nothing in the catch block. Because of this, the transaction can silently terminate. The transaction will be successful and the user will not receive Execution Fee. Such Silent Failure will happen all the time provided that the deposit owner is a multisig wallet, because in the refundExecutionFee function the transfer of commission is performed using transfer and not call. Due to the out of gas, the user will not get the fee he is entitled to.
The user will not receive their fee, nor will they be able to trace the cause of the error anywhere. This undermines the trust in the protocol.
Consider adding to the catch block accounting for unrealised user fees
Please read the CodeHawks documentation to know which submissions are valid. If you disagree, provide a coded PoC and explain the real likelihood and the detailed impact on the mainnet without any supposition (if, it could, etc) to prove your point.
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.