You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2018/09/18 09:33:26 UTC

svn commit: r1841210 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java

Author: mduerig
Date: Tue Sep 18 09:33:25 2018
New Revision: 1841210

URL: http://svn.apache.org/viewvc?rev=1841210&view=rev
Log:
OAK-7761: SegmentTarWriter#readSegment does not check the return value of FileChannel#read

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java?rev=1841210&r1=1841209&r2=1841210&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java Tue Sep 18 09:33:25 2018
@@ -20,8 +20,10 @@ package org.apache.jackrabbit.oak.segmen
 
 import static com.google.common.base.Charsets.UTF_8;
 import static com.google.common.base.Preconditions.checkState;
+import static org.apache.jackrabbit.oak.commons.IOUtils.readFully;
 import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.BLOCK_SIZE;
 
+import java.io.EOFException;
 import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
@@ -138,7 +140,9 @@ public class SegmentTarWriter implements
         }
         checkState(channel != null); // implied by entry != null
         ByteBuffer data = ByteBuffer.allocate(indexEntry.getLength());
-        channel.read(data, indexEntry.getPosition());
+        if (readFully(channel, indexEntry.getPosition(), data) < indexEntry.getLength()) {
+            throw new EOFException();
+        }
         data.rewind();
         return data;
     }