Contract Airdrop
Function claim()
Do not check for msg.sender is in Soulmate.ownerToId mapping before calculating numberOfDaysInCouple which leads:
numberOfDaysInCouple equal number of days since Jan 01 1970 to block.timestamp
amountAlreadyClaimed equal zero.
which leads that any account without soulmate can claim as much tokens as much days since 1970 to block.timestamp multiplied by 10 ** loveToken.decimals()
Add this test to AirdropTest.t.sol and run via forge test --mt test_ClaimWithoutSoulmate() to see it success.
Output:
Manual review, foundry.
Make the following changes in Airdrop.claim()
https://github.com/Cyfrin/2024-02-soulmate/blob/b3f9227942ffd5c443ce6bccaa980fea0304c38f/src/Airdrop.sol#L51C1-L89C6
High severity, This issue is separated from the flawed `isDivorced()` check presented in issue #168 as even if that is fixed, if ownership is not checked, isDivorced would still default to false and allow bypass to claim airdrops by posing as tokenId 0 in turn resulting in this [important check for token claim is bypassed.](https://github.com/Cyfrin/2024-02-soulmate/blob/b3f9227942ffd5c443ce6bccaa980fea0304c38f/src/Airdrop.sol#L61-L66). #220 is the most comprehensive issue as it correctly recognizes both issues existing within the same function.
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.