| 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() { |