Category: Coding Mistakes
Function _getTokenPrice()
could return unexpected value
Informational Severity
Informational Impact
N/A Likelihood
Description
The _getTokenPrice()
function in the ChainlinkOracleAggregator
contract performs an external staticcall
to fetch the price of the specified token
.
function _getTokenPrice(
address token
) internal view returns (uint256 tokenPriceUnadjusted) {
(bool success, bytes memory ret) = tokensInfo[token]
.callAddress
.staticcall(tokensInfo[token].callData);
if (tokensInfo[token].dataSigned) {
tokenPriceUnadjusted = uint256(abi.decode(ret, (int256)));
} else {
tokenPriceUnadjusted = abi.decode(ret, (uint256));
}
}
Impact
The return value success
of the staticcall
is not checked, which leads to the possibility that when success == false
, the function return value tokenPriceUnadjusted
could be zero. This could cause the caller function getTokenValueOfOneNativeToken
to calculate the exchangeRate
incorrectly, which would ultimately affect the result of exchangePrice
.
This could potentially lead to unexpected bugs in the future.
Recommendations
Consider checking the value of success
, or check the return value at the caller's side.
Remediation
Biconomy Labs implemented a fix for this issue in commit ca06c2a4↗.