The changeParticipationStatus()function doesn't check if the msg.sender is a registered participant of the protocol
Any random user can call the changeParticipationStatus()function, irrespective of them being a participant. This error allows a random user to be updated as the participant of the protocol if they call this function before the deadline. Now since the participant[msg.sender] = truefor the non-participating user, resulting in a wrong state and on calling the deposit() function for the first time by them they emit the wrong event GenerousAdditionalContributionas well as they get acess to the refund()function given that refund has a participant check in place, resulting in wrong emits Refunded
Improper use of event emissions can mislead users or off-chain systems, such as dApps or explorers. Emitting false or extra events for actions that didn't occur can deceive systems and trigger unintended behavior
Manual Review
To ensure an account is a participant it has to have previously deposited tokens/ether into the contract and then changed their participation status. So we add that check initially to filter proper users who should be allowed to access this function.
and a _hasBalanceInContract is defined to check if the user has funds deposited in the contract:
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.