The functions setDistribution, setRewardTokenConfig, and setDepositTokenConfig lack checks for zero addresses. This can lead to setting a critical contract address to the zero address, resulting in potential loss of funds or failed transactions.
Zero address vulnerabilities can render the contract unusable or lead to loss of assets.
function setDistribution(address distribution_) public onlyOwner {
+ require(distribution_ != address(0), "L1S: invalid distribution");
distribution = distribution_;
}
function setRewardTokenConfig(RewardTokenConfig calldata newConfig_) public onlyOwner {
+ require(newConfig_.receiver != address(0), "L1S: invalid receiver");
+ require(newConfig_.gateway != address(0), "L1S: invalid gateway");
rewardTokenConfig = newConfig_;
}
function setDepositTokenConfig(DepositTokenConfig calldata newConfig_) public onlyOwner {
require(newConfig_.receiver != address(0), "L1S: invalid receiver");
+ require(newConfig_.gateway != address(0), "L1S: invalid gateway");
DepositTokenConfig storage oldConfig = depositTokenConfig;
_replaceDepositToken(oldConfig.token, newConfig_.token);
_replaceDepositTokenGateway(oldConfig.gateway, newConfig_.gateway, oldConfig.token, newConfig_.token);
depositTokenConfig = newConfig_;
}
(Additional) Missing Event Emissions: Consider adding events for all the functions above as they cause impactful changes on the protocol.