The contract's receive() function accepts Ether deposits at any time, but the refund() function is restricted by the beforeDeadline modifier. This mismatch creates a situation where users can deposit Ether after the deadline but cannot retrieve it.
The receive() function lacks the beforeDeadline modifier:
ChristmasDinner.sol#L205
While the refund() function has the modifier:
ChristmasDinner.sol#L137
Users can permanently lose funds by sending Ether to the contract after the deadline
No mechanism exists to recover these trapped funds
Manual code review
Performing formal verification with Quint
Add the beforeDeadline modifier to the receive() 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.