Skip to content

Commit 2024049

Browse files
authored
Fix silent division-by-zero and potential bounds overshoot in BatchingSpliterator (#1211)
1 parent e3cb1ed commit 2024049

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/main/java/com/pivovarit/collectors/BatchingSpliterator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ public boolean tryAdvance(Consumer<? super List<T>> action) {
8686
int end = Math.min(source.size(), consumed + chunkSize);
8787
List<T> batch = source.subList(consumed, end);
8888
consumed += batch.size();
89-
chunkSize = (int) Math.ceil(((double) (source.size() - consumed)) / --chunks);
89+
if (--chunks > 0) {
90+
chunkSize = (int) Math.ceil(((double) (source.size() - consumed)) / chunks);
91+
}
9092
action.accept(batch);
9193
return true;
9294
} else {
@@ -102,7 +104,7 @@ public Spliterator<List<T>> trySplit() {
102104
}
103105

104106
int midChunks = chunks / 2;
105-
int midSize = midChunks * chunkSize;
107+
int midSize = Math.min(midChunks * chunkSize, source.size() - consumed);
106108

107109
var subList = source.subList(consumed, consumed + midSize);
108110
var split = new BatchingSpliterator<>(subList, midChunks);

0 commit comments

Comments
 (0)