From 6e0ace1914f120fb24b2c1b648b08e4084011209 Mon Sep 17 00:00:00 2001 From: Francisco Giordano Date: Mon, 24 Sep 2018 20:38:33 -0300 Subject: [PATCH] make initializer modifier check if running in constructor --- contracts/Initializable.sol | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/contracts/Initializable.sol b/contracts/Initializable.sol index a50149e5a..df1aa1e7b 100644 --- a/contracts/Initializable.sol +++ b/contracts/Initializable.sol @@ -29,7 +29,7 @@ contract Initializable { * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { - require(initializing || !initialized, "Contract instance has already been initialized"); + require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool wasInitializing = initializing; initializing = true; @@ -39,4 +39,11 @@ contract Initializable { initializing = wasInitializing; } + + /// @dev Returns true if and only if the function is running in the constructor + function isConstructor() private view returns (bool) { + uint cs; + assembly { cs := extcodesize(address) } + return cs == 0; + } }