Index: src/java/org/apache/lucene/store/RAMInputStream.java =================================================================== --- src/java/org/apache/lucene/store/RAMInputStream.java (revision 555478) +++ src/java/org/apache/lucene/store/RAMInputStream.java (working copy) @@ -41,6 +41,7 @@ public RAMInputStream(RAMFile f) { file = f; length = file.length; + assert length/BUFFER_SIZE < Integer.MAX_VALUE : "Too large RAMFile! "+length; // make sure that we switch to the // first needed buffer lazily @@ -87,11 +88,9 @@ } else { currentBuffer = (byte[]) file.buffers.get(currentBufferIndex); bufferPosition = 0; - bufferStart = BUFFER_SIZE * currentBufferIndex; - bufferLength = (int) (length - bufferStart); - if (bufferLength > BUFFER_SIZE) { - bufferLength = BUFFER_SIZE; - } + bufferStart = (long) BUFFER_SIZE * (long) currentBufferIndex; + long buflen = length - bufferStart; + bufferLength = buflen > BUFFER_SIZE ? BUFFER_SIZE : (int) buflen; } } @@ -100,8 +99,7 @@ } public void seek(long pos) throws IOException { - long bufferStart = currentBufferIndex * BUFFER_SIZE; - if (pos < bufferStart || pos >= bufferStart + BUFFER_SIZE) { + if (currentBuffer==null || pos < bufferStart || pos >= bufferStart + BUFFER_SIZE) { currentBufferIndex = (int) (pos / BUFFER_SIZE); switchCurrentBuffer(); }