summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorPaulo Casanova <pasc@google.com>2017-03-22 19:14:20 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-03-22 19:14:20 +0000
commitdf3747fbbae03ef5c49b54f4b699e17d81465e93 (patch)
tree74eed5ea9016f8405336f92b57adc49ee16272f0 /src/main
parent5324b4aacd9f415eb2b65545e05f4b588731f1db (diff)
parent7e52226688e009157cd4a1eb610e4bd6688a7690 (diff)
downloadapkzlib-df3747fbbae03ef5c49b54f4b699e17d81465e93.tar.gz
Merge "Fix bug 35841603: updating zip with invalid extra" into studio-master-dev
am: 9a5309c7a2 Change-Id: I92b700f615382582c52140dbe107a52d4e2d4fff
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/android/apkzlib/zip/ZFile.java14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/main/java/com/android/apkzlib/zip/ZFile.java b/src/main/java/com/android/apkzlib/zip/ZFile.java
index bf16b59..c92e99b 100644
--- a/src/main/java/com/android/apkzlib/zip/ZFile.java
+++ b/src/main/java/com/android/apkzlib/zip/ZFile.java
@@ -934,9 +934,19 @@ public class ZFile implements Closeable {
* the alignment field, if it exists. Also, sum the size of all kept extra field
* segments.
*/
+ ImmutableList<ExtraField.Segment> currentSegments;
+ try {
+ currentSegments = storedEntry.getLocalExtra().getSegments();
+ } catch (IOException e) {
+ /*
+ * Parsing current segments has failed. This means the contents of the extra
+ * field are not valid. We'll continue discarding the existing segments.
+ */
+ currentSegments = ImmutableList.of();
+ }
+
List<ExtraField.Segment> extraFieldSegments = new ArrayList<>();
- int newExtraFieldSize =
- storedEntry.getLocalExtra().getSegments().stream()
+ int newExtraFieldSize = currentSegments.stream()
.filter(s -> s.getHeaderId()
!= ExtraField.ALIGNMENT_ZIP_EXTRA_DATA_FIELD_HEADER_ID)
.peek(extraFieldSegments::add)