_isCallerStreamRecipientOrApproved()
is called inside _void()
Same situation happens during _withdraw()
Here inside _isCallerStreamRecipientOrApproved()
, the msg.sender
will be the SablierFlow contract & not the actual caller.
If the SablierFlow contract is approved or the recipient, then anyone call void()
to end the stream because when the call enters _isCallerStreamRecipientOrApproved()
from the SablierFlow contract, the caller is msg.sender
is changed from the actual caller to the SablierFlow contract's address.
Manual Review
Add an addition parameter which checks the actual address of the caller instead of msg.sender
.
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.