summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Riley <davidriley@google.com>2016-01-04 19:05:34 +0100
committerandroid-build-merger <android-build-merger@google.com>2016-01-04 19:05:34 +0100
commitc1de9837e3bdb64bc1f5d9779df7a944326f5f2b (patch)
treed4b4909d30b7122a373de764dc718e1ea5567da7
parentMerge "res: Embed FPS into icon_installing.png." (diff)
parentMerge "imgdiff: skip spurious gzip headers in image files" (diff)
downloadandroid_bootable_recovery-c1de9837e3bdb64bc1f5d9779df7a944326f5f2b.tar
android_bootable_recovery-c1de9837e3bdb64bc1f5d9779df7a944326f5f2b.tar.gz
android_bootable_recovery-c1de9837e3bdb64bc1f5d9779df7a944326f5f2b.tar.bz2
android_bootable_recovery-c1de9837e3bdb64bc1f5d9779df7a944326f5f2b.tar.lz
android_bootable_recovery-c1de9837e3bdb64bc1f5d9779df7a944326f5f2b.tar.xz
android_bootable_recovery-c1de9837e3bdb64bc1f5d9779df7a944326f5f2b.tar.zst
android_bootable_recovery-c1de9837e3bdb64bc1f5d9779df7a944326f5f2b.zip
Diffstat (limited to '')
-rw-r--r--applypatch/imgdiff.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/applypatch/imgdiff.cpp b/applypatch/imgdiff.cpp
index 50cabbe6b..f22502e38 100644
--- a/applypatch/imgdiff.cpp
+++ b/applypatch/imgdiff.cpp
@@ -407,6 +407,7 @@ unsigned char* ReadImage(const char* filename,
while (pos < sz) {
unsigned char* p = img+pos;
+ bool processed_deflate = false;
if (sz - pos >= 4 &&
p[0] == 0x1f && p[1] == 0x8b &&
p[2] == 0x08 && // deflate compression
@@ -460,18 +461,24 @@ unsigned char* ReadImage(const char* filename,
strm.next_out = curr->data + curr->len;
ret = inflate(&strm, Z_NO_FLUSH);
if (ret < 0) {
- printf("Error: inflate failed [%s] at file offset [%zu]\n"
- "imgdiff only supports gzip kernel compression,"
- " did you try CONFIG_KERNEL_LZO?\n",
- strm.msg, chunk_offset);
- free(img);
- return NULL;
+ if (!processed_deflate) {
+ // This is the first chunk, assume that it's just a spurious
+ // gzip header instead of a real one.
+ break;
+ }
+ printf("Error: inflate failed [%s] at file offset [%zu]\n"
+ "imgdiff only supports gzip kernel compression,"
+ " did you try CONFIG_KERNEL_LZO?\n",
+ strm.msg, chunk_offset);
+ free(img);
+ return NULL;
}
curr->len = allocated - strm.avail_out;
if (strm.avail_out == 0) {
allocated *= 2;
curr->data = reinterpret_cast<unsigned char*>(realloc(curr->data, allocated));
}
+ processed_deflate = true;
} while (ret != Z_STREAM_END);
curr->deflate_len = sz - strm.avail_in - pos;