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 fr...@apache.org on 2017/08/04 08:49:28 UTC

svn commit: r1804080 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java

Author: frm
Date: Fri Aug  4 08:49:27 2017
New Revision: 1804080

URL: http://svn.apache.org/viewvc?rev=1804080&view=rev
Log:
OAK-6518 - Perform the checksum computation before parsing the entries

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

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java?rev=1804080&r1=1804079&r2=1804080&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java Fri Aug  4 08:49:27 2017
@@ -76,13 +76,17 @@ public class IndexLoader {
         index.mark();
 
         CRC32 checksum = new CRC32();
+        checksum.update(index.array());
+        if (crc32 != (int) checksum.getValue()) {
+            throw new InvalidIndexException("Invalid checksum");
+        }
+
         long limit = length - 2 * blockSize - bytes - blockSize;
         long lastMsb = Long.MIN_VALUE;
         long lastLsb = Long.MIN_VALUE;
         byte[] entry = new byte[ENTRY_SIZE];
         for (int i = 0; i < count; i++) {
             index.get(entry);
-            checksum.update(entry);
 
             ByteBuffer buffer = wrap(entry);
             long msb = buffer.getLong();
@@ -107,10 +111,6 @@ public class IndexLoader {
             lastLsb = lsb;
         }
 
-        if (crc32 != (int) checksum.getValue()) {
-            throw new InvalidIndexException("Invalid checksum");
-        }
-
         index.reset();
 
         return new Index(index);