# Burning a Soulbound Profile Does Not Clean Up likes or matches in LikeRegistry – Stale State Enables Re-Minting Exploits
## Summary
`SoulboundProfileNFT.burnProfile()` deletes the `profileToToken` mapping entry, allowing the user to mint a fresh profile. However, `LikeRegistry` is never notified of the burn. The `likes` and `matches` mappings retain the user's old address. If the user re-mints a profile under the same address, their old likes and matches are still active. This breaks the protocol's intended one-profile-per-address invariant.
## Vulnerability Details
**Impact:** Medium
**Likelihood:** High
A user can burn and re-mint profiles to manipulate their match history, escape from unwanted likes, or re-trigger matches with accumulated state.
### Proof of Concept
The test below confirms that after a user burns their profile, their relationship history remains active in `LikeRegistry`. When the user creates a brand new profile using the exact same address, the old likes automatically map to the new profile, confirming that stale state persists across profile lifecycles.
```solidity
function test_BurnProfileLeavesStaleState() public {
vm.prank(alice);
profileNFT.mintProfile("Alice", 25, "imageHash");
vm.prank(bob);
profileNFT.mintProfile("Bob", 28, "imageHash");
vm.prank(alice);
likeRegistry.likeUser{value: 1 ether}(bob);
vm.prank(alice);
profileNFT.burnProfile();
assertTrue(likeRegistry.likes(alice, bob));
vm.prank(alice);
profileNFT.mintProfile("AliceNew", 26, "imageHash2");
assertTrue(likeRegistry.likes(alice, bob));
}
```
## Tools Used
Manual Review, Foundry
## Recommendations
Add a callback from `burnProfile` to `LikeRegistry` that clears the user's likes and matches, or prevent re-minting after a burn.
```solidity
function burnProfile() external {
likeRegistry.cleanupState(msg.sender);
}
```