The SablierV2Lockup::withdrawMaxAndTransfer
function transfers the streamId
to the new recipient. But it does not check whether the recipient can receive NFT. This might lock the NFT in the contract.
The SablierV2Lockup::withdrawMaxAndTransfer
function transfers the streamId
from the currentRecipient
to the newRecipient
bby direct call of the ERC721::_transfer
function. This function does not check whether the recipient can receive ERC721
tokens. This can be fixed by using ERC721::_transfer
. However, ERC721::_transfer
might introduce a reentrancy, so it hould be used together with a reentrancy guard.
If the recipient of the streamId
can not receive NFT, than the streamId
NFT will be locked in the recipient contract forever and the stream will become unusable.
Manual Review
Use ERC721::_safeTransfer
with a reentrancy
guard instead of ERC721::_transfer
to be sure that the recipient can receive NFT.
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.