summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2018-12-17 22:48:12 +0100
committerandroid-build-merger <android-build-merger@google.com>2018-12-17 22:48:12 +0100
commitb78c30c394d968bd7b1aba0c008f3012abe96403 (patch)
treebb57d4448c9a35b3cc578ae1aca5de0a69a03e0d
parentMerge "Show wipe data confirmation text in recovery mode" am: c456aab7e2 (diff)
parentMerge "applypatch: Fix comparison of integers of different signs." (diff)
downloadandroid_bootable_recovery-b78c30c394d968bd7b1aba0c008f3012abe96403.tar
android_bootable_recovery-b78c30c394d968bd7b1aba0c008f3012abe96403.tar.gz
android_bootable_recovery-b78c30c394d968bd7b1aba0c008f3012abe96403.tar.bz2
android_bootable_recovery-b78c30c394d968bd7b1aba0c008f3012abe96403.tar.lz
android_bootable_recovery-b78c30c394d968bd7b1aba0c008f3012abe96403.tar.xz
android_bootable_recovery-b78c30c394d968bd7b1aba0c008f3012abe96403.tar.zst
android_bootable_recovery-b78c30c394d968bd7b1aba0c008f3012abe96403.zip
-rw-r--r--applypatch/freecache.cpp16
-rw-r--r--applypatch/imgpatch.cpp2
2 files changed, 13 insertions, 5 deletions
diff --git a/applypatch/freecache.cpp b/applypatch/freecache.cpp
index e4878655e..3868ef230 100644
--- a/applypatch/freecache.cpp
+++ b/applypatch/freecache.cpp
@@ -141,8 +141,9 @@ static int64_t FreeSpaceForFile(const std::string& filename) {
return -1;
}
- int64_t free_space = static_cast<int64_t>(sf.f_bsize) * sf.f_bavail;
- if (sf.f_bsize == 0 || free_space / sf.f_bsize != sf.f_bavail) {
+ auto f_bsize = static_cast<int64_t>(sf.f_bsize);
+ auto free_space = sf.f_bsize * sf.f_bavail;
+ if (f_bsize == 0 || free_space / f_bsize != static_cast<int64_t>(sf.f_bavail)) {
LOG(ERROR) << "Invalid block size or overflow (sf.f_bsize " << sf.f_bsize << ", sf.f_bavail "
<< sf.f_bavail << ")";
return -1;
@@ -170,6 +171,13 @@ bool CheckAndFreeSpaceOnCache(size_t bytes) {
bool RemoveFilesInDirectory(size_t bytes_needed, const std::string& dirname,
const std::function<int64_t(const std::string&)>& space_checker) {
+ // The requested size cannot exceed max int64_t.
+ if (static_cast<uint64_t>(bytes_needed) >
+ static_cast<uint64_t>(std::numeric_limits<int64_t>::max())) {
+ LOG(ERROR) << "Invalid arg of bytes_needed: " << bytes_needed;
+ return false;
+ }
+
struct stat st;
if (stat(dirname.c_str(), &st) == -1) {
PLOG(ERROR) << "Failed to stat " << dirname;
@@ -187,7 +195,7 @@ bool RemoveFilesInDirectory(size_t bytes_needed, const std::string& dirname,
}
LOG(INFO) << free_now << " bytes free on " << dirname << " (" << bytes_needed << " needed)";
- if (free_now >= bytes_needed) {
+ if (free_now >= static_cast<int64_t>(bytes_needed)) {
return true;
}
@@ -230,7 +238,7 @@ bool RemoveFilesInDirectory(size_t bytes_needed, const std::string& dirname,
return false;
}
LOG(INFO) << "Deleted " << file << "; now " << free_now << " bytes free";
- if (free_now >= bytes_needed) {
+ if (free_now >= static_cast<int64_t>(bytes_needed)) {
return true;
}
}
diff --git a/applypatch/imgpatch.cpp b/applypatch/imgpatch.cpp
index e6be39a2f..f4c33e5a3 100644
--- a/applypatch/imgpatch.cpp
+++ b/applypatch/imgpatch.cpp
@@ -54,7 +54,7 @@ static bool ApplyBSDiffPatchAndStreamOutput(const uint8_t* src_data, size_t src_
const Value& patch, size_t patch_offset,
const char* deflate_header, SinkFn sink) {
size_t expected_target_length = static_cast<size_t>(Read8(deflate_header + 32));
- CHECK_GT(expected_target_length, 0);
+ CHECK_GT(expected_target_length, static_cast<size_t>(0));
int level = Read4(deflate_header + 40);
int method = Read4(deflate_header + 44);
int window_bits = Read4(deflate_header + 48);