While the contract accepts both ERC20 tokens and Ether deposits, the withdraw() function only handles ERC20 token withdrawals, leaving any Ether deposits permanently locked in the contract with no way for the host to access them.
The withdraw() function only transfers ERC20 tokens:
ChristmasDinner.sol#L194-L199
While the contract accepts Ether through the receive() function:
ChristmasDinner.sol#L205-L208
Host cannot access Ether deposits needed for event organization
All Ether sent to the contract becomes permanently locked after deadline
Undermines the core functionality of the contract as a fund collection mechanism
Manual code review
Performing formal verification with Quint
Add Ether withdrawal functionality to the withdraw() 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.