Omniscia 0xPhase Audit
StorageUpgradeableProxy Static Analysis Findings
StorageUpgradeableProxy Static Analysis Findings
SUP-01S: Data Location Optimizations
Type | Severity | Location |
---|---|---|
Gas Optimization | StorageUpgradeableProxy.sol:L58-L59 |
Description:
The linked input arguments are set as memory
in external
function(s).
Example:
55function upgradeTo(56 address _newStorage,57 bytes32 _newSlot,58 bytes memory _oldImplementationData,59 bytes memory _newImplementationData60) external onlyOwner {
Recommendation:
We advise them to be set as calldata
optimizing their read-access gas cost.
Alleviation (3dd3d7bf0c2693b2f9c23bacedfa420393f7ea84):
The referenced data location specifiers have been optimally set to calldata
as advised.
SUP-02S: Inexistent Sanitization of Input Addresses
Type | Severity | Location |
---|---|---|
Input Sanitization | StorageUpgradeableProxy.sol:L34-L46 |
Description:
The linked function(s) accept address
arguments yet do not properly sanitize them.
Impact:
The presence of zero-value addresses, especially in constructor
implementations, can cause the contract to be permanently inoperable. These checks are advised as zero-value inputs are a common side-effect of off-chain software related bugs.
Example:
34constructor(35 address _owner,36 address _storage,37 bytes32 _slot,38 bytes memory _initialCall39) {40 _setImplementation(_storage, _slot);41 _initializeOwnership(_owner);42
43 if (_initialCall.length > 0) {44 CallLib.delegateCallFunc(address(this), _initialCall);45 }46}
Recommendation:
We advise some basic sanitization to be put in place by ensuring that each address
specified is non-zero.
Alleviation (3dd3d7bf0c2693b2f9c23bacedfa420393f7ea84):
Both input addresses of the contact's StorageUpgradeableProxy::constructor
are sanitized as non-zero, preventing the contract from being misconfigured on deployment.