diff options
author | Paulo Casanova <pasc@google.com> | 2018-01-25 23:03:32 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-01-25 23:03:32 +0000 |
commit | 0214d1425335a8be8e255e13c3b2a309dce78fa4 (patch) | |
tree | fb52f6439f8d9c8965ebf14c67ec416cc6b1aa8d | |
parent | 85885092489696eb56b270da1740fef0c7baa0c7 (diff) | |
parent | aa0c4020767a0937ac99ad0131379c8e2d805ae7 (diff) | |
download | apkzlib-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.java | 6 | ||||
-rw-r--r-- | src/test/java/com/android/apkzlib/zip/ZFileTest.java | 17 | ||||
-rw-r--r-- | src/test/resources/testData/packaging/v2-signed.apk | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000..7f48475 --- /dev/null +++ b/src/test/resources/testData/packaging/v2-signed.apk |