The BuyerAgent contract contains a permission inconsistency in its purchase functionality where operators are granted access but will always fail at the Swan contract level.
The BuyerAgent.purchase() function can be called by both owner and operators (through onlyAuthorized modifier). However, Swan.purchase() has a strict check requiring msg.sender to be the listing.buyer. This means operators will always fail at the Swan contract level, making the operator permission in BuyerAgent effectively useless for purchases.
In BuyerAgent contract:
Swan.sol contract
This creates a situation where operators can initiate purchases that will inevitably fail.
Operators can't call the purchase function
Manual review
In Swan::purchase add authorization for operator
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.