Platform: Code4rena
Start Date: 17/03/2023
Pot Size: $36,500 USDC
Total HM: 10
Participants: 98
Period: 3 days
Judge: leastwood
Total Solo HM: 5
Id: 223
League: ETH
Rank: 62/98
Findings: 1
Award: $22.77
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: Sathish9098
Also found by: 0xAgro, 0xSmartContract, 0xdaydream, 0xnev, Awesome, Aymen0909, BRONZEDISC, Bauchibred, Deathstore, Diana, IceBear, Jerry0x, Kresh, Matin, Rolezn, Stryder, T1MOH, Udsen, adriro, alejandrocovrr, atharvasama, codeslide, cryptonue, descharre, igingu, jack, joestakey, libratus, lukris02, luxartvinsec, nadin, nasri136, reassor, scokaf, shark, slvDev, tnevler
22.7749 USDC - $22.77
On canto-namespace-protocol/src/Namespace.sol#L184 the burn function has the following structure:
function burn(uint256 _id) external { address nftOwner = ownerOf(_id); if (nftOwner != msg.sender && getApproved[_id] != msg.sender && !isApprovedForAll[nftOwner][msg.sender]) revert CallerNotAllowedToBurn(); string memory associatedName = tokenToName[_id]; delete tokenToName[_id]; delete nameToToken[associatedName]; _burn(_id); }
I'm suggesting the following code as a refactor for QA purposes:
function burn(uint256 _id) external { require(_id != 0, "Invalid ID"); address nftOwner = ownerOf(_id); require( nftOwner == msg.sender || getApproved(_id) == msg.sender || isApprovedForAll[nftOwner][msg.sender], "Caller not authorized to burn" ); string memory associatedName = tokenToName[_id]; require(bytes(associatedName).length > 0, "No name associated with token"); delete tokenToName[_id]; delete nameToToken[associatedName]; _burn(_id); }
In this revised code:
#0 - c4-judge
2023-04-11T05:48:48Z
0xleastwood marked the issue as grade-b