The constructor includes an unused variable _registry, and the value assigned to registry might be invalid if it points to an externally owned account (EOA) or a contract that is not an instance of CharityRegistry
registry = CharityRegistry(msg.sender); is assigned an invalid address if the msg.sender is an EOA account or if its a contract which is not an instance of the CharityRegistry. Also _registry is an unused variable.
If the msg.sender passed to CharityRegistry is an EOA account or a contract that is not an instance of CharityRegistry it will always return the registry.isVerified(charity) check to false making the donate function inaccessible.
Manual review.
Set the registry with the correct instance of the CharityRegistry i.e _registry passed in the constructor.
Likelyhood: High, the parameter is not well used and won't be set. Impact: Low, can be changed with the setter and no one will be able to donate to malicious charity.
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.