The SablierV2Lockup::withdrawMaxAndTransfer
function is used for withdrawing the maximum amount of tokens from the stream to the current recipient and then transfering the NFT to the new recipient, so that the new recipient can withdraw tokens from the stream. However, the way the NFT is transfered is by using the ERC721::_transfer
function, which does not check whether the recipient is aware of the ERC721 protocol. This could lead to potential NFT loss.
If the recipient is a contract which is not aware of incoming NFTs, then the transferred NFT would be locked in the recipient forever.
Manual Review
Consider using ERC721::_safeTransfer
, which checks if contract recipients are aware of the ERC721 standard to prevent tokens from being forever locked.
https://docs.codehawks.com/hawks-auditors/how-to-determine-a-finding-validity
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.