You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2015/01/21 17:18:39 UTC

svn commit: r1653577 - in /lucene/dev/branches/lucene_solr_4_10/lucene: CHANGES.txt core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipReader.java core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipWriter.java

Author: mikemccand
Date: Wed Jan 21 16:18:38 2015
New Revision: 1653577

URL: http://svn.apache.org/r1653577
Log:
LUCENE-6192: don't overflow int when writing skip data for high freq terms in extremely large indices

Modified:
    lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt
    lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipReader.java
    lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipWriter.java

Modified: lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt?rev=1653577&r1=1653576&r2=1653577&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt Wed Jan 21 16:18:38 2015
@@ -14,6 +14,10 @@ Bug fixes
   causing substantial performance cost for use cases that frequently
   delete old documents (Mike McCandless)
 
+* LUCENE-6192: Fix int overflow corruption case in skip data for
+  high frequency terms in extremely large indices (Robert Muir, Mike
+  McCandless)
+
 ======================= Lucene 4.10.3 ======================
 
 Bug fixes

Modified: lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipReader.java?rev=1653577&r1=1653576&r2=1653577&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipReader.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipReader.java Wed Jan 21 16:18:38 2015
@@ -195,13 +195,13 @@ final class Lucene41SkipReader extends M
     // if (DEBUG) {
     //   System.out.println("  delta=" + delta);
     // }
-    docPointer[level] += skipStream.readVInt();
+    docPointer[level] += skipStream.readVLong();
     // if (DEBUG) {
     //   System.out.println("  docFP=" + docPointer[level]);
     // }
 
     if (posPointer != null) {
-      posPointer[level] += skipStream.readVInt();
+      posPointer[level] += skipStream.readVLong();
       // if (DEBUG) {
       //   System.out.println("  posFP=" + posPointer[level]);
       // }
@@ -215,7 +215,7 @@ final class Lucene41SkipReader extends M
       }
 
       if (payPointer != null) {
-        payPointer[level] += skipStream.readVInt();
+        payPointer[level] += skipStream.readVLong();
       }
     }
     return delta;

Modified: lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipWriter.java?rev=1653577&r1=1653576&r2=1653577&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipWriter.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41SkipWriter.java Wed Jan 21 16:18:38 2015
@@ -151,14 +151,14 @@ final class Lucene41SkipWriter extends M
     skipBuffer.writeVInt(delta);
     lastSkipDoc[level] = curDoc;
 
-    skipBuffer.writeVInt((int) (curDocPointer - lastSkipDocPointer[level]));
+    skipBuffer.writeVLong(curDocPointer - lastSkipDocPointer[level]);
     lastSkipDocPointer[level] = curDocPointer;
 
     if (fieldHasPositions) {
       // if (DEBUG) {
       //   System.out.println("  curPosPointer=" + curPosPointer + " curPosBufferUpto=" + curPosBufferUpto);
       // }
-      skipBuffer.writeVInt((int) (curPosPointer - lastSkipPosPointer[level]));
+      skipBuffer.writeVLong(curPosPointer - lastSkipPosPointer[level]);
       lastSkipPosPointer[level] = curPosPointer;
       skipBuffer.writeVInt(curPosBufferUpto);
 
@@ -167,7 +167,7 @@ final class Lucene41SkipWriter extends M
       }
 
       if (fieldHasOffsets || fieldHasPayloads) {
-        skipBuffer.writeVInt((int) (curPayPointer - lastSkipPayPointer[level]));
+        skipBuffer.writeVLong(curPayPointer - lastSkipPayPointer[level]);
         lastSkipPayPointer[level] = curPayPointer;
       }
     }