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 startTime
is 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.canceled
is 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 castVotes
can 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.