The normal behavior is that each listing has its own immutable sale record so a seller can always settle their completed sale later, even after future relistings of the same NFT.
The issue is that listings are stored by tokenId (s_listings[_tokenId]) instead of by a unique listing id, while the contract still increments listingsCounter. When the same NFT is relisted, the old listing record is overwritten, which can block or misdirect settlement for earlier sales.
Likelihood:
This occurs whenever a sold NFT is relisted before the previous seller calls settlement.
This occurs naturally in active markets where assets are bought and relisted quickly.
Impact:
Previous seller can lose access to proceeds because onlySeller now points to the new seller in the overwritten slot.
Settlement/accounting correctness breaks, creating stranded funds and potential theft/griefing conditions.
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.
The contest is complete and the rewards are being distributed.