Lack of input validation in initialize
Description
The initialize
function in both CurveLpTokenPriceOracleNoRegistry
and FusePoolLens
does not validate the passed array parameters which may lead to unintended storage outcomes.
Impact
In both of the initialize
functions, Ionic Protocol uses a for-loop to iterate through array parameters and append them to a mapping variable. If the lengths of the arrays are not equal, the initialize
call will either revert or complete successfully with missing data.
In CurveLpTokenPriceOracleNoRegistry
, the mappings poolOf
and underlyingTokens
may not be set to the intended values if the length of the array _lpTokens
is less than the length of either the _pools
or _poolUnderlyings
arrays.
In FusePoolLens
, the mapping variable hardcoded
stores the mapping of token addresses (_hardcodedAddresses
) to TokenData
which includes a token's name
and symbol
. If the length of the _hardcodedAddresses
array is less than the length of the _hardcodedNames
or _hardcodedSymbols
arrays, then parameters in those arrays that exist after _hardcodedAddresses.length
will not be stored.
Recommendations
Consider adding require
statements in the initialize
function to validate user-controlled data input and to ensure that array lengths are equal.
Remediation
The issue has been fixed by Ionic Protocol in commit c71037↗.