If a player submits a smart contract as a player, and if it doesn't implement the receive() or fallback() function, the call use to send the funds to the winner will fail to execute, compromising the functionality of the protocol.
The vulnerability comes from the way that are programmed smart contracts, if the smart contract doesn't implement a receive() payable or fallback() payable functions, it is not possible to send ether to the program.
High - Medium: The protocol won't be able to select a winner but players will be able to withdraw funds with the refund() function
Restrict access to the raffle to only EOAs (Externally Owned Accounts), by checking if the passed address in enterRaffle is a smart contract, if it is we revert the transaction.
We can easily implement this check into the function because of the Adress library from OppenZeppelin.
I'll add this replace enterRaffle() with these lines of code:
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.