withdrawFees() has a strict check against address(this).balance such that bad actors could intentionally send in 1 wei to DoS it.
The address(this).balance == uint256(totalFees)
check could be easily manipulated by sending 1 wei into the PuppyRaffle contract. Since there's no payable fallback function in PuppyRaffle, we could use the selfdestruct to achieve that as follows:
When we create a Exp contract with 1 wei paid and kill() it with PuppyRaffle address, address(this).balance would be uint256(totalFees) + 1 such that the check in withdrawFees() would not pass.
Fees cannot be collected
Manual review
Check players.length to see if there's any active palyer
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.