Normally, after an NFT auction or direct purchase is completed, the contract should clear the listing record for the given tokenId to prevent redundant storage and future logic misinterpretation.
However, in _executeSale, the code only sets listing.listed = false; without fully deleting listings[tokenId]. As a result, fields such as seller, minPrice, buyNowPrice, and auctionEnd remain in storage.
Likelihood:
Whenever a sale or auction settlement is executed, old listing data remains stored
Impact:
Residual fields (seller, prices, auctionEnd) may be misused by future logic or cause confusion in analytics/monitoring.
For example, after a successful sale, calling getListing(tokenId) still returns non-zero seller/minPrice/buyNowPrice values, with only listed=false. If future code or frontends mistakenly rely on these fields, it may wrongly interpret the NFT as being actively listed.
After _executeSale completes, fully delete the listing record to free storage and ensure no future misuse of stale fields.
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.