don't throw scary EOFE if you pass oob docID to IR.document
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/branch_3x@1164628 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lucene/src/java/org/apache/lucene/index/IndexReader.java b/lucene/src/java/org/apache/lucene/index/IndexReader.java
index 836a53d..ca689bf 100644
--- a/lucene/src/java/org/apache/lucene/index/IndexReader.java
+++ b/lucene/src/java/org/apache/lucene/index/IndexReader.java
@@ -834,6 +834,9 @@
*/
public Document document(int n) throws CorruptIndexException, IOException {
ensureOpen();
+ if (n < 0 || n >= maxDoc()) {
+ throw new IllegalArgumentException("docID must be >= 0 and < maxDoc=" + maxDoc() + " (got docID=" + n + ")");
+ }
return document(n, null);
}
diff --git a/lucene/src/java/org/apache/lucene/index/SegmentReader.java b/lucene/src/java/org/apache/lucene/index/SegmentReader.java
index bdae1c4..527ac99 100644
--- a/lucene/src/java/org/apache/lucene/index/SegmentReader.java
+++ b/lucene/src/java/org/apache/lucene/index/SegmentReader.java
@@ -469,6 +469,9 @@
@Override
public Document document(int n, FieldSelector fieldSelector) throws CorruptIndexException, IOException {
ensureOpen();
+ if (n < 0 || n >= maxDoc()) {
+ throw new IllegalArgumentException("docID must be >= 0 and < maxDoc=" + maxDoc() + " (got docID=" + n + ")");
+ }
return getFieldsReader().doc(n, fieldSelector);
}
diff --git a/lucene/src/test/org/apache/lucene/index/TestIndexReader.java b/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
index ac03b9e..d2d3050 100644
--- a/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
+++ b/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
@@ -1329,4 +1329,21 @@
assertEquals(3, closeCount[0]);
dir.close();
}
+
+ public void testOOBDocID() throws Exception {
+ Directory dir = newDirectory();
+ IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ writer.addDocument(new Document());
+ IndexReader r = writer.getReader();
+ writer.close();
+ r.document(0);
+ try {
+ r.document(1);
+ fail("did not hit exception");
+ } catch (IllegalArgumentException iae) {
+ // expected
+ }
+ r.close();
+ dir.close();
+ }
}