diff --git a/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java b/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java index df739d85061..f2c3de11a4c 100644 --- a/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java +++ b/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java @@ -770,7 +770,11 @@ final class DefaultIndexingChain extends DocConsumer { } invertState.lastStartOffset = startOffset; - invertState.length = Math.addExact(invertState.length, invertState.termFreqAttribute.getTermFrequency()); + try { + invertState.length = Math.addExact(invertState.length, invertState.termFreqAttribute.getTermFrequency()); + } catch (ArithmeticException ae) { + throw new IllegalArgumentException("too many tokens for field \"" + field.name() + "\""); + } //System.out.println(" term=" + invertState.termAttribute); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestCustomTermFreq.java b/lucene/core/src/test/org/apache/lucene/index/TestCustomTermFreq.java index 5b38f576644..d2eff257648 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestCustomTermFreq.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestCustomTermFreq.java @@ -303,7 +303,7 @@ public class TestCustomTermFreq extends LuceneTestCase { new int[] {3, Integer.MAX_VALUE}), fieldType); doc2.add(field); - expectThrows(ArithmeticException.class, () -> {w.addDocument(doc2);}); + expectThrows(IllegalArgumentException.class, () -> {w.addDocument(doc2);}); IndexReader r = DirectoryReader.open(w); assertEquals(1, r.numDocs());