The first entrants of the raffle will be paying nothing to enter the raffle but can get a refund which is equal to entranceFee which the contract is initialized with.
The enterRaffle contracts allows for the msg.value to be equal entranceFee * newPlayers.length, where the newPlayers.length in initialized with zero making the first entrants pay nothing to enter the raffle. However, the refund in the refund function allows for every players to get refunded the entrance fee (payable(msg.sender).sendValue(entranceFee)).
Contract ends up having less money than it should have or goes out of balance leading to loss by some users.
Manual Review
There should be a mapping which keep tracks of how much each user paid to enter the raffle and the fund should be based on that.
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.