diff options
author | David Riley <davidriley@google.com> | 2015-12-10 19:18:25 +0100 |
---|---|---|
committer | David Riley <davidriley@google.com> | 2015-12-23 18:43:59 +0100 |
commit | 0779fc98147a298eda6475c7744c5957ac382740 (patch) | |
tree | d4b4909d30b7122a373de764dc718e1ea5567da7 /applypatch | |
parent | Merge "res: Embed FPS into icon_installing.png." (diff) | |
download | android_bootable_recovery-0779fc98147a298eda6475c7744c5957ac382740.tar android_bootable_recovery-0779fc98147a298eda6475c7744c5957ac382740.tar.gz android_bootable_recovery-0779fc98147a298eda6475c7744c5957ac382740.tar.bz2 android_bootable_recovery-0779fc98147a298eda6475c7744c5957ac382740.tar.lz android_bootable_recovery-0779fc98147a298eda6475c7744c5957ac382740.tar.xz android_bootable_recovery-0779fc98147a298eda6475c7744c5957ac382740.tar.zst android_bootable_recovery-0779fc98147a298eda6475c7744c5957ac382740.zip |
Diffstat (limited to 'applypatch')
-rw-r--r-- | applypatch/imgdiff.cpp | 19 |
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; |