Description
The provided functions return default values for non-existent token IDs because they do not check if the token ID exists before accessing its information.
    function tokenURI(
        uint256 tokenId
    ) public view override returns (string memory) {
 @>
        CatInfo memory catInfo = s_catInfo[tokenId];
        string memory catTokenUri = Base64.encode(
            abi.encodePacked(
                '{"name": "',
                catInfo.catName,
                '", "breed": "',
                catInfo.breed,
                '", "image": "',
                catInfo.image,
                '", "dob": ',
                Strings.toString(catInfo.dob),
                ', "owner": "',
@>                Strings.toHexString(_ownerOf(tokenId)),
                '", "shopPartner": "',
                Strings.toHexString(catInfo.shopPartner),
                '"}'
            )
        );
        return string.concat(_baseURI(), catTokenUri);
    }
    function getCatAge(uint256 tokenId) external view returns (uint256) {
@>
        return block.timestamp - s_catInfo[tokenId].dob;
    }
    function getCatInfo(
        uint256 tokenId
    ) external view returns (CatInfo memory) {
@>
        return s_catInfo[tokenId];
    }
Risk
Likelyhood: Low
Impact: Low
Recommended Mitigation
    function tokenURI(
        uint256 tokenId
    ) public view override returns (string memory) {
        CatInfo memory catInfo = s_catInfo[tokenId];
        string memory catTokenUri = Base64.encode(
            abi.encodePacked(
                '{"name": "',
                catInfo.catName,
                '", "breed": "',
                catInfo.breed,
                '", "image": "',
                catInfo.image,
                '", "dob": ',
                Strings.toString(catInfo.dob),
                ', "owner": "',
-                Strings.toHexString(_ownerOf(tokenId)),
+                Strings.toHexString(ownerOf(tokenId)),
                '", "shopPartner": "',
                Strings.toHexString(catInfo.shopPartner),
                '"}'
            )
        );
        return string.concat(_baseURI(), catTokenUri);
    }
    function getCatAge(uint256 tokenId) external view returns (uint256) {
+        require(_exists(tokenId));
        return block.timestamp - s_catInfo[tokenId].dob;
    }
    function getCatInfo(
        uint256 tokenId
    ) external view returns (CatInfo memory) {
+        require(_exists(tokenId));
        return s_catInfo[tokenId];
    }