The contract’s castVote function does not check whether a proposal has been canceled, allowing users to continue voting on a proposal that should no longer be active.
In Governance::cancel a proposal gets cancelled and proposal.canceled = true. But in Governance::castVote which allows a user to cast vote on a specified proposal, there is no check to ensure that the proposal has not been canceled. Instead it only checks that the proposal startTimeis not zero(which indicates a non-existent proposal) and is being called before the endTime. These parameters were not reset during cancelation of proposal. And the proposal.canceledis not explicitly checked and enforced.
Canceled proposals will potentially receive votes which is needless.
Manual Review
Either reset the startTime of a proposal during cancelation to 0. so the check in castVotescan catch this. OR, add a check in castVotes that reverts if (proposal.canceled).
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.