Procházet zdrojové kódy

Ensure AccessControlDefaultAdminRules's initialDefaultAdmin is non-zero (#4220)

Co-authored-by: Ernesto García <ernestognw@gmail.com>
Hadrien Croubois před 2 roky
rodič
revize
72ed4ca67a

+ 1 - 0
contracts/access/AccessControlDefaultAdminRules.sol

@@ -53,6 +53,7 @@ abstract contract AccessControlDefaultAdminRules is IAccessControlDefaultAdminRu
      * @dev Sets the initial values for {defaultAdminDelay} and {defaultAdmin} address.
      */
     constructor(uint48 initialDelay, address initialDefaultAdmin) {
+        require(initialDefaultAdmin != address(0), "AccessControl: 0 default admin");
         _currentDelay = initialDelay;
         _grantRole(DEFAULT_ADMIN_ROLE, initialDefaultAdmin);
     }

+ 8 - 1
test/access/AccessControlDefaultAdminRules.test.js

@@ -1,4 +1,4 @@
-const { time } = require('@openzeppelin/test-helpers');
+const { time, constants, expectRevert } = require('@openzeppelin/test-helpers');
 const {
   shouldBehaveLikeAccessControl,
   shouldBehaveLikeAccessControlDefaultAdminRules,
@@ -13,6 +13,13 @@ contract('AccessControlDefaultAdminRules', function (accounts) {
     this.accessControl = await AccessControlDefaultAdminRules.new(delay, accounts[0], { from: accounts[0] });
   });
 
+  it('initial admin not zero', async function () {
+    await expectRevert(
+      AccessControlDefaultAdminRules.new(delay, constants.ZERO_ADDRESS),
+      'AccessControl: 0 default admin',
+    );
+  });
+
   shouldBehaveLikeAccessControl('AccessControl', ...accounts);
   shouldBehaveLikeAccessControlDefaultAdminRules('AccessControl', delay, ...accounts);
 });