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);