summaryrefslogtreecommitdiffstats
path: root/applypatch/imgpatch.cpp
diff options
context:
space:
mode:
authorTianjie Xu <xunchang@google.com>2017-03-07 23:44:14 +0100
committerTianjie Xu <xunchang@google.com>2017-03-16 20:09:49 +0100
commit12b90553d784b9d4ddd1b48300af6345bdf1085f (patch)
tree7924f282e7c95e7b304acc1102aaa1e2a5bfaa96 /applypatch/imgpatch.cpp
parentMerge "Revert "Print SHA-1 in hex for corrupted blocks"" (diff)
downloadandroid_bootable_recovery-12b90553d784b9d4ddd1b48300af6345bdf1085f.tar
android_bootable_recovery-12b90553d784b9d4ddd1b48300af6345bdf1085f.tar.gz
android_bootable_recovery-12b90553d784b9d4ddd1b48300af6345bdf1085f.tar.bz2
android_bootable_recovery-12b90553d784b9d4ddd1b48300af6345bdf1085f.tar.lz
android_bootable_recovery-12b90553d784b9d4ddd1b48300af6345bdf1085f.tar.xz
android_bootable_recovery-12b90553d784b9d4ddd1b48300af6345bdf1085f.tar.zst
android_bootable_recovery-12b90553d784b9d4ddd1b48300af6345bdf1085f.zip
Diffstat (limited to 'applypatch/imgpatch.cpp')
-rw-r--r--applypatch/imgpatch.cpp25
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);