diff options
author | Tao Bao <tbao@google.com> | 2018-12-17 22:48:12 +0100 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-12-17 22:48:12 +0100 |
commit | b78c30c394d968bd7b1aba0c008f3012abe96403 (patch) | |
tree | bb57d4448c9a35b3cc578ae1aca5de0a69a03e0d | |
parent | Merge "Show wipe data confirmation text in recovery mode" am: c456aab7e2 (diff) | |
parent | Merge "applypatch: Fix comparison of integers of different signs." (diff) | |
download | android_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.cpp | 16 | ||||
-rw-r--r-- | applypatch/imgpatch.cpp | 2 |
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); |