summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaulo Casanova <pasc@google.com>2018-01-25 23:03:32 +0000
committerandroid-build-merger <android-build-merger@google.com>2018-01-25 23:03:32 +0000
commit0214d1425335a8be8e255e13c3b2a309dce78fa4 (patch)
treefb52f6439f8d9c8965ebf14c67ec416cc6b1aa8d
parent85885092489696eb56b270da1740fef0c7baa0c7 (diff)
parentaa0c4020767a0937ac99ad0131379c8e2d805ae7 (diff)
downloadapkzlib-0214d1425335a8be8e255e13c3b2a309dce78fa4.tar.gz
Fixed bug in ZFile that did not allow RO open. am: 0ab7865e6f
am: aa0c402076 Change-Id: I7cc99515583045311a399feea25d443c8ee64080
-rw-r--r--src/main/java/com/android/apkzlib/zip/ZFile.java6
-rw-r--r--src/test/java/com/android/apkzlib/zip/ZFileTest.java17
-rw-r--r--src/test/resources/testData/packaging/v2-signed.apkbin0 -> 1501947 bytes
3 files changed, 20 insertions, 3 deletions
diff --git a/src/main/java/com/android/apkzlib/zip/ZFile.java b/src/main/java/com/android/apkzlib/zip/ZFile.java
index 396d8ac..d86a3c5 100644
--- a/src/main/java/com/android/apkzlib/zip/ZFile.java
+++ b/src/main/java/com/android/apkzlib/zip/ZFile.java
@@ -580,9 +580,13 @@ public class ZFile implements Closeable {
entryEndOffset = 0;
}
+ /*
+ * Check if there is an extra central directory offset. If there is, save it. Note that
+ * we can't call extraDirectoryOffset() because that would mark the file as dirty.
+ */
long extraOffset = directoryStartOffset - entryEndOffset;
Verify.verify(extraOffset >= 0, "extraOffset (%s) < 0", extraOffset);
- setExtraDirectoryOffset(extraOffset);
+ extraDirectoryOffset = extraOffset;
}
/**
diff --git a/src/test/java/com/android/apkzlib/zip/ZFileTest.java b/src/test/java/com/android/apkzlib/zip/ZFileTest.java
index a596399..7497412 100644
--- a/src/test/java/com/android/apkzlib/zip/ZFileTest.java
+++ b/src/test/java/com/android/apkzlib/zip/ZFileTest.java
@@ -27,11 +27,9 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
-import com.android.apkzlib.utils.ApkZFileTestUtils;
import com.android.apkzlib.zip.compress.DeflateExecutionCompressor;
import com.android.apkzlib.zip.utils.CloseableByteSource;
import com.android.apkzlib.zip.utils.RandomAccessFileUtils;
-import com.android.testutils.TestUtils;
import com.google.common.base.Charsets;
import com.google.common.base.Strings;
import com.google.common.hash.Hashing;
@@ -148,6 +146,21 @@ public class ZFileTest {
try (ZFile zf = new ZFile(testZip)) {
assertEquals(1, zf.entries().size());
+ assertTrue(zf.getCentralDirectoryOffset() > 0);
+ assertTrue(zf.getEocdOffset() > 0);
+ }
+ }
+
+ @Test
+ public void readOnlyV2SignedApkSupport() throws Exception {
+ File testZip = ZipTestUtils.cloneRsrc("v2-signed.apk", mTemporaryFolder);
+
+ assertTrue(testZip.setWritable(false));
+
+ try (ZFile zf = new ZFile(testZip)) {
+ assertEquals(416, zf.entries().size());
+ assertTrue(zf.getCentralDirectoryOffset() > 0);
+ assertTrue(zf.getEocdOffset() > 0);
}
}
diff --git a/src/test/resources/testData/packaging/v2-signed.apk b/src/test/resources/testData/packaging/v2-signed.apk
new file mode 100644
index 0000000..7f48475
--- /dev/null
+++ b/src/test/resources/testData/packaging/v2-signed.apk
Binary files differ