Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
when we go over a collection of editStreams in FSEditLog::logEdit we pre-calculate number of iterations for the "for loop":
int numEditStreams = editStreams.size();
for (int idx = 0; idx < numEditStreams(); idx++) {
...
processIOError(idx);
...
}
but there is a possibility of an IOError that will call processIOError(idx) which will remove an editStream from editStreams inside the loop, and that will cause IndexOutOfBoundsException when end of collection is reached.
proposed fix: recalculate size of the collection on every iteration (it is very cheap, cause it just returns an integer).