Make isConsumingScheduleOp return bytes4 to mitigate clashes (#4575)
Co-authored-by: Francisco Giordano <fg@frang.io>
This commit is contained in:
@ -85,8 +85,8 @@ abstract contract AccessManaged is Context, IAccessManaged {
|
||||
* being consumed. Prevents denial of service for delayed restricted calls in the case that the contract performs
|
||||
* attacker controlled calls.
|
||||
*/
|
||||
function isConsumingScheduledOp() public view returns (bool) {
|
||||
return _consumingSchedule;
|
||||
function isConsumingScheduledOp() public view returns (bytes4) {
|
||||
return _consumingSchedule ? this.isConsumingScheduledOp.selector : bytes4(0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -655,7 +655,9 @@ contract AccessManager is Context, Multicall, IAccessManager {
|
||||
*/
|
||||
function consumeScheduledOp(address caller, bytes calldata data) public virtual {
|
||||
address target = _msgSender();
|
||||
require(IAccessManaged(target).isConsumingScheduledOp());
|
||||
if (IAccessManaged(target).isConsumingScheduledOp() != IAccessManaged.isConsumingScheduledOp.selector) {
|
||||
revert AccessManagerUnauthorizedConsume(target);
|
||||
}
|
||||
_consumeScheduledOp(_hashOperation(caller, target, data));
|
||||
}
|
||||
|
||||
@ -704,7 +706,7 @@ contract AccessManager is Context, Multicall, IAccessManager {
|
||||
(bool isAdmin, ) = hasGroup(ADMIN_GROUP, msgsender);
|
||||
(bool isGuardian, ) = hasGroup(getGroupGuardian(getTargetFunctionGroup(target, selector)), msgsender);
|
||||
if (!isAdmin && !isGuardian) {
|
||||
revert AccessManagerCannotCancel(msgsender, caller, target, selector);
|
||||
revert AccessManagerUnauthorizedCancel(msgsender, caller, target, selector);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -13,5 +13,5 @@ interface IAccessManaged {
|
||||
|
||||
function setAuthority(address) external;
|
||||
|
||||
function isConsumingScheduledOp() external view returns (bool);
|
||||
function isConsumingScheduledOp() external view returns (bytes4);
|
||||
}
|
||||
|
||||
@ -48,7 +48,8 @@ interface IAccessManager {
|
||||
error AccessManagerBadConfirmation();
|
||||
error AccessManagerUnauthorizedAccount(address msgsender, uint64 groupId);
|
||||
error AccessManagerUnauthorizedCall(address caller, address target, bytes4 selector);
|
||||
error AccessManagerCannotCancel(address msgsender, address caller, address target, bytes4 selector);
|
||||
error AccessManagerUnauthorizedConsume(address target);
|
||||
error AccessManagerUnauthorizedCancel(address msgsender, address caller, address target, bytes4 selector);
|
||||
error AccessManagerInvalidInitialAdmin(address initialAdmin);
|
||||
|
||||
function canCall(
|
||||
|
||||
Reference in New Issue
Block a user