diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java index 5035b7d91dc..2b105de27d2 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java @@ -97,12 +97,6 @@ public class SimpleTextTermVectorsReader extends TermVectorsReader { @Override public Fields get(int doc) throws IOException { - // TestTV tests for this in testBadParams... but is this - // really guaranteed by the API? - if (doc < 0 || doc >= offsets.length) { - throw new IllegalArgumentException("doc id out of range"); - } - SortedMap fields = new TreeMap(); in.seek(offsets[doc]); readLine(); diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java index 00f8e0bdb67..714ec84219f 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java @@ -730,9 +730,6 @@ public class Lucene40TermVectorsReader extends TermVectorsReader implements Clos @Override public Fields get(int docID) throws IOException { - if (docID < 0 || docID >= numTotalDocs) { - throw new IllegalArgumentException("doID=" + docID + " is out of bounds [0.." + (numTotalDocs-1) + "]"); - } if (tvx != null) { Fields fields = new TVFields(docID); if (fields.size() == 0) { diff --git a/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java b/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java index 221b8537e8a..8292edf7d71 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java +++ b/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java @@ -136,9 +136,7 @@ public final class SegmentReader extends AtomicReader { @Override public void document(int docID, StoredFieldVisitor visitor) throws IOException { - if (docID < 0 || docID >= maxDoc()) { - throw new IllegalArgumentException("docID must be >= 0 and < maxDoc=" + maxDoc() + " (got docID=" + docID + ")"); - } + checkBounds(docID); getFieldsReader().visitDocument(docID, visitor); } @@ -174,8 +172,15 @@ public final class SegmentReader extends AtomicReader { if (termVectorsReader == null) { return null; } + checkBounds(docID); return termVectorsReader.get(docID); } + + private void checkBounds(int docID) { + if (docID < 0 || docID >= maxDoc()) { + throw new IndexOutOfBoundsException("docID must be >= 0 and < maxDoc=" + maxDoc() + " (got docID=" + docID + ")"); + } + } @Override public String toString() { diff --git a/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java b/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java index 280ab6eade7..07b7467ae2c 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java @@ -204,4 +204,28 @@ public class TestSegmentReader extends LuceneTestCase { assertTrue(results != null); assertEquals("We do not have 3 term freq vectors", 3, results.size()); } + + public void testOutOfBoundsAccess() throws IOException { + int numDocs = reader.maxDoc(); + try { + reader.document(-1); + fail(); + } catch (IndexOutOfBoundsException expected) {} + + try { + reader.getTermVectors(-1); + fail(); + } catch (IndexOutOfBoundsException expected) {} + + try { + reader.document(numDocs); + fail(); + } catch (IndexOutOfBoundsException expected) {} + + try { + reader.getTermVectors(numDocs); + fail(); + } catch (IndexOutOfBoundsException expected) {} + + } } diff --git a/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java b/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java index f5adb1189dd..b653b3fd04c 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java @@ -328,26 +328,4 @@ public class TestTermVectorsReader extends LuceneTestCase { } reader.close(); } - - /** - * Make sure exceptions and bad params are handled appropriately - */ - public void testBadParams() throws IOException { - TermVectorsReader reader = null; - try { - reader = Codec.getDefault().termVectorsFormat().vectorsReader(dir, seg.info, fieldInfos, newIOContext(random())); - //Bad document number, good field number - reader.get(50); - fail(); - } catch (IllegalArgumentException e) { - // expected exception - } finally { - reader.close(); - } - reader = Codec.getDefault().termVectorsFormat().vectorsReader(dir, seg.info, fieldInfos, newIOContext(random())); - //good document number, bad field - Terms vector = reader.get(0).terms("f50"); - assertNull(vector); - reader.close(); - } }