According to OZ's documentation, tokenId must not exist before _safeMint is called, but the selectWinner function sets tokenId to totalSupply() before _safeMint is called.
Here are OpenZeppelin's docs on ERC721.sol, specifcally the _safeMint function:
And here is the selectWinner function which assigns totalSupply() to tokenId before _safeMint is called:
_safeMint may fail, bricking the drawing or there could be a collision where _safeMint tries to mint an NFT as the index of totalSupply() but there already appears to be something there.
Manual review
Delete the line assigning totalSupply() to tokenId or set it after _safeMint is called. If you do the latter, you may need to use nonReentrant because you would be updating state after interactions.
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.