Update initializer modifier to prevent reentrancy during initialization (#3006)
Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
(cherry picked from commit 08840b9f8c)
This commit is contained in:
@ -10,16 +10,25 @@ import "../proxy/utils/Initializable.sol";
|
||||
*/
|
||||
contract InitializableMock is Initializable {
|
||||
bool public initializerRan;
|
||||
bool public onlyInitializingRan;
|
||||
uint256 public x;
|
||||
|
||||
function initialize() public initializer {
|
||||
initializerRan = true;
|
||||
}
|
||||
|
||||
function initializeNested() public initializer {
|
||||
function initializeOnlyInitializing() public onlyInitializing {
|
||||
onlyInitializingRan = true;
|
||||
}
|
||||
|
||||
function initializerNested() public initializer {
|
||||
initialize();
|
||||
}
|
||||
|
||||
function onlyInitializingNested() public initializer {
|
||||
initializeOnlyInitializing();
|
||||
}
|
||||
|
||||
function initializeWithX(uint256 _x) public payable initializer {
|
||||
x = _x;
|
||||
}
|
||||
@ -32,3 +41,21 @@ contract InitializableMock is Initializable {
|
||||
require(false, "InitializableMock forced failure");
|
||||
}
|
||||
}
|
||||
|
||||
contract ConstructorInitializableMock is Initializable {
|
||||
bool public initializerRan;
|
||||
bool public onlyInitializingRan;
|
||||
|
||||
constructor() initializer {
|
||||
initialize();
|
||||
initializeOnlyInitializing();
|
||||
}
|
||||
|
||||
function initialize() public initializer {
|
||||
initializerRan = true;
|
||||
}
|
||||
|
||||
function initializeOnlyInitializing() public onlyInitializing {
|
||||
onlyInitializingRan = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user