You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2012/11/09 20:52:22 UTC

svn commit: r1407605 - in /lucene/dev/trunk/lucene: codecs/src/java/org/apache/lucene/codecs/simpletext/ core/src/java/org/apache/lucene/codecs/lucene40/ core/src/java/org/apache/lucene/index/ core/src/test/org/apache/lucene/index/

Author: rmuir
Date: Fri Nov  9 19:52:20 2012
New Revision: 1407605

URL: http://svn.apache.org/viewvc?rev=1407605&view=rev
Log:
LUCENE-4466: bounds check term vectors in segmentreader, not the codec

Modified:
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java?rev=1407605&r1=1407604&r2=1407605&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java Fri Nov  9 19:52:20 2012
@@ -97,12 +97,6 @@ public class SimpleTextTermVectorsReader
   
   @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();

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java?rev=1407605&r1=1407604&r2=1407605&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java Fri Nov  9 19:52:20 2012
@@ -730,9 +730,6 @@ public class Lucene40TermVectorsReader e
 
   @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) {

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java?rev=1407605&r1=1407604&r2=1407605&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java Fri Nov  9 19:52:20 2012
@@ -136,9 +136,7 @@ public final class SegmentReader extends
   
   @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
     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() {

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java?rev=1407605&r1=1407604&r2=1407605&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentReader.java Fri Nov  9 19:52:20 2012
@@ -204,4 +204,28 @@ public class TestSegmentReader extends L
     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) {}
+    
+  }
 }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java?rev=1407605&r1=1407604&r2=1407605&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java Fri Nov  9 19:52:20 2012
@@ -328,26 +328,4 @@ public class TestTermVectorsReader exten
     }
     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();
-  }
 }