Lack of updating ChoosingRam::isRamSelected variable in the ChoosingRam::increaseValuesOfParticipants function allows for overwriting players as Ram, because the ChoosingRam::RamIsNotSelected modifier is not triggered.
After updating all characteristics of a Ram NFT with ChoosingRam::increaseValuesOfParticipants and getting stored as ChoosingRam::selectedRam, there's no updating ChoosingRam::isRamSelected to true, which allows for other calls to ChoosingRam::increaseValuesOfParticipants to the highest update to overwrite the players address as ChoosingRam::selectedRam.
No player is assured its victory, even when being selected as Ram, which breaks the purpose of the protocol.
Manual review
Add isRamSelected = true;
after both selectedRam = ramNFT.getCharacteristics(tokenIdOfChallenger).ram;
lines in the ChoosingRam::increaseValuesOfParticipants 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.