Stable Graphite Rooster
High
Function _getStakeholdersForMarket
will be revert with stack overflow and getAllVerifiedLendersForMarket
and getAllVerifiedBorrowersForMarket
will revert.
There is stack overflow in function _getStakeholdersForMarket
.
- Anyone needs to call
getAllVerifiedLendersForMarket
orgetAllVerifiedBorrowersForMarket
. - In function
_getStakeholdersForMarket
, the conditionsstart <= len
,start < end
andstart > 0
will hold.
No response
- Someone calls
getAllVerifiedLendersForMarket
orgetAllVerifiedBorrowersForMarket
. - If
start
<=len
,start
<end
andstart
>0
, a stack overflow occurs at the linestakeholders_[i] = _set.at(i);
The protocol fails to retrieve verified borrowers or lenders for market because it reverts due to a stack overflow.
No response
The _getStakeholdersForMarket
function should be corrected as follows.
function _getStakeholdersForMarket(
EnumerableSet.AddressSet storage _set,
uint256 _page,
uint256 _perPage
) internal view returns (address[] memory stakeholders_) {
uint256 len = _set.length();
uint256 start = _page * _perPage;
if (start <= len) {
uint256 end = start + _perPage;
// Ensure we do not go out of bounds
if (end > len) {
end = len;
}
stakeholders_ = new address[](end - start);
for (uint256 i = start; i < end; i++) {
- stakeholders_[i] = _set.at(i);
+ stakeholders_[i - start] = _set.at(i); // Correct indexing by offset
}
}
}