blob: e49fdd9bb6bc0bcb284077ebdd77821c32b7496d [file] [log] [blame]
Index: lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java (revision 1407594)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java (working copy)
@@ -97,12 +97,6 @@
@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<String,SimpleTVTerms> fields = new TreeMap<String,SimpleTVTerms>();
in.seek(offsets[doc]);
readLine();
Index: lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java (revision 1407594)
+++ lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java (working copy)
@@ -328,26 +328,4 @@
}
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();
- }
}
Index: lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java (revision 1407594)
+++ lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java (working copy)
@@ -204,4 +204,28 @@
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) {}
+
+ }
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java (revision 1407594)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java (working copy)
@@ -730,9 +730,6 @@
@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) {
Index: lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (revision 1407594)
+++ lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (working copy)
@@ -136,9 +136,7 @@
@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 @@
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() {