In the BaseGauge contract, the reward period never truly ends due to periodFinish being calculated based on a continuously updating lastUpdateTime. This means rewards continue indefinitely instead of properly ending at a fixed point in time.
The circular dependency creates an infinite period:
lastUpdateTime is set to lastTimeRewardApplicable()
lastTimeRewardApplicable() returns min(block.timestamp, periodFinish())
periodFinish() returns lastUpdateTime + getPeriodDuration()
This means periodFinish is always in the future relative to the current block.timestamp
Reward periods never actually end.
Manual review
Fix the period finish calculation to be based on the reward period start time rather than the last update time
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.