make initializer modifier check if running in constructor

This commit is contained in:
Francisco Giordano
2018-09-24 20:38:33 -03:00
parent 5b8d5eb5e9
commit 6e0ace1914

View File

@ -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;
}
}