diff options
author | Tianjie Xu <xunchang@google.com> | 2017-03-17 02:06:49 +0100 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-17 02:06:49 +0100 |
commit | 92d167513d56a0e34d47e26d8be0f73e9c2730ad (patch) | |
tree | 084696e97211816e9741b70ff581c735503d179e /applypatch/imgpatch.cpp | |
parent | Merge "updater: Minor clean up to EnumerateStash()." am: 4fc7659612 am: 8209daeff1 (diff) | |
parent | Merge "More cleanup to imgdiff & imgpatch" am: 3541934ff5 (diff) | |
download | android_bootable_recovery-92d167513d56a0e34d47e26d8be0f73e9c2730ad.tar android_bootable_recovery-92d167513d56a0e34d47e26d8be0f73e9c2730ad.tar.gz android_bootable_recovery-92d167513d56a0e34d47e26d8be0f73e9c2730ad.tar.bz2 android_bootable_recovery-92d167513d56a0e34d47e26d8be0f73e9c2730ad.tar.lz android_bootable_recovery-92d167513d56a0e34d47e26d8be0f73e9c2730ad.tar.xz android_bootable_recovery-92d167513d56a0e34d47e26d8be0f73e9c2730ad.tar.zst android_bootable_recovery-92d167513d56a0e34d47e26d8be0f73e9c2730ad.zip |
Diffstat (limited to 'applypatch/imgpatch.cpp')
-rw-r--r-- | applypatch/imgpatch.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/applypatch/imgpatch.cpp b/applypatch/imgpatch.cpp index 8f4a2a42b..adcc61fd6 100644 --- a/applypatch/imgpatch.cpp +++ b/applypatch/imgpatch.cpp @@ -31,10 +31,17 @@ #include <applypatch/applypatch.h> #include <applypatch/imgdiff.h> +#include <android-base/memory.h> #include <openssl/sha.h> #include <zlib.h> -#include "utils.h" +static inline int64_t Read8(const void *address) { + return android::base::get_unaligned<int64_t>(address); +} + +static inline int32_t Read4(const void *address) { + return android::base::get_unaligned<int32_t>(address); +} int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, const unsigned char* patch_data, ssize_t patch_size, @@ -86,9 +93,9 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, const Value return -1; } - size_t src_start = Read8(normal_header); - size_t src_len = Read8(normal_header + 8); - size_t patch_offset = Read8(normal_header + 16); + size_t src_start = static_cast<size_t>(Read8(normal_header)); + size_t src_len = static_cast<size_t>(Read8(normal_header + 8)); + size_t patch_offset = static_cast<size_t>(Read8(normal_header + 16)); if (src_start + src_len > static_cast<size_t>(old_size)) { printf("source data too short\n"); @@ -125,11 +132,11 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, const Value return -1; } - size_t src_start = Read8(deflate_header); - size_t src_len = Read8(deflate_header + 8); - size_t patch_offset = Read8(deflate_header + 16); - size_t expanded_len = Read8(deflate_header + 24); - size_t target_len = Read8(deflate_header + 32); + size_t src_start = static_cast<size_t>(Read8(deflate_header)); + size_t src_len = static_cast<size_t>(Read8(deflate_header + 8)); + size_t patch_offset = static_cast<size_t>(Read8(deflate_header + 16)); + size_t expanded_len = static_cast<size_t>(Read8(deflate_header + 24)); + size_t target_len = static_cast<size_t>(Read8(deflate_header + 32)); int level = Read4(deflate_header + 40); int method = Read4(deflate_header + 44); int windowBits = Read4(deflate_header + 48); |