From 963d82c903b7ee65c11695962edd3f67c0213c05 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 11 Mar 2017 23:15:41 -0500 Subject: [PATCH] cache: assume archive data we don't decompress contains no revision. The downloaded data does not. --- cache/src/main/java/net/runelite/cache/fs/Archive.java | 3 ++- cache/src/main/java/net/runelite/cache/fs/DataFile.java | 2 +- cache/src/main/java/net/runelite/cache/fs/Index.java | 9 ++++++--- .../test/java/net/runelite/cache/fs/DataFileTest.java | 3 ++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/cache/src/main/java/net/runelite/cache/fs/Archive.java b/cache/src/main/java/net/runelite/cache/fs/Archive.java index 9d9ce8f31b..ec0853dd92 100644 --- a/cache/src/main/java/net/runelite/cache/fs/Archive.java +++ b/cache/src/main/java/net/runelite/cache/fs/Archive.java @@ -153,8 +153,9 @@ public class Archive logger.warn("whirlpool mismatch for archive {}", this); } - if (this.getRevision() != res.revision) + if (res.revision != -1 && this.getRevision() != res.revision) { + // compressed data doesn't always include a revision, but check it if it does logger.warn("revision mismatch for archive {}", this); } diff --git a/cache/src/main/java/net/runelite/cache/fs/DataFile.java b/cache/src/main/java/net/runelite/cache/fs/DataFile.java index 3899928cbb..8e3ed1efb4 100644 --- a/cache/src/main/java/net/runelite/cache/fs/DataFile.java +++ b/cache/src/main/java/net/runelite/cache/fs/DataFile.java @@ -377,7 +377,7 @@ public class DataFile implements Closeable DataFileReadResult res = new DataFileReadResult(); res.data = data; res.revision = revision; - int length = revision != -1 ? b.length - 2 : b.length;; + int length = revision != -1 ? b.length - 2 : b.length; res.crc = crc32.getHash(); res.whirlpool = Whirlpool.getHash(b, length); res.compression = compression; diff --git a/cache/src/main/java/net/runelite/cache/fs/Index.java b/cache/src/main/java/net/runelite/cache/fs/Index.java index 8ff75400eb..47390cd6a0 100644 --- a/cache/src/main/java/net/runelite/cache/fs/Index.java +++ b/cache/src/main/java/net/runelite/cache/fs/Index.java @@ -211,7 +211,7 @@ public class Index implements Closeable public void save() throws IOException { - saveFiles(); + saveArchives(); byte[] data = this.writeIndexData(); @@ -348,26 +348,29 @@ public class Index implements Closeable } } - public void saveFiles() throws IOException + public void saveArchives() throws IOException { for (Archive a : archives) { assert this.index.getIndexFileId() == this.id; DataFile data = store.getData(); + int rev; // used for determining what part of compressedData to crc byte[] compressedData; if (a.getData() != null) { compressedData = a.getData(); // data was never decompressed or loaded + rev = -1; // assume that this data has no revision? } else { byte[] fileData = a.saveContents(); + rev = a.getRevision(); compressedData = DataFile.compress(fileData, a.getCompression(), a.getRevision(), null); } - DataFileWriteResult res = data.write(this.id, a.getArchiveId(), compressedData, a.getRevision()); + DataFileWriteResult res = data.write(this.id, a.getArchiveId(), compressedData, rev); this.index.write(new IndexEntry(this.index, a.getArchiveId(), res.sector, res.compressedLength)); logger.trace("Saved archive {}/{} at sector {}, compressed length {}", this.getId(), a.getArchiveId(), res.sector, res.compressedLength); diff --git a/cache/src/test/java/net/runelite/cache/fs/DataFileTest.java b/cache/src/test/java/net/runelite/cache/fs/DataFileTest.java index e48eb864a5..fc756e5097 100644 --- a/cache/src/test/java/net/runelite/cache/fs/DataFileTest.java +++ b/cache/src/test/java/net/runelite/cache/fs/DataFileTest.java @@ -26,7 +26,6 @@ package net.runelite.cache.fs; import java.io.File; import java.io.IOException; -import java.nio.ByteBuffer; import net.runelite.cache.StoreLocation; import org.junit.Assert; import org.junit.Rule; @@ -56,6 +55,8 @@ public class DataFileTest byte[] buf = res2.data; String str = new String(buf); Assert.assertEquals("test", str); + + Assert.assertEquals(res.crc, res2.crc); } }