diff options
author | Paulo Casanova <pasc@google.com> | 2017-03-22 19:14:20 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-22 19:14:20 +0000 |
commit | df3747fbbae03ef5c49b54f4b699e17d81465e93 (patch) | |
tree | 74eed5ea9016f8405336f92b57adc49ee16272f0 /src/main | |
parent | 5324b4aacd9f415eb2b65545e05f4b588731f1db (diff) | |
parent | 7e52226688e009157cd4a1eb610e4bd6688a7690 (diff) | |
download | apkzlib-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.java | 14 |
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) |