Merge "applypatch: Fix comparison of integers of different signs." am: dfbdaf3f1d
am: acdb8d8d18
Change-Id: I29de1277fb4eec55c615c906379c8379ca801a46
This commit is contained in:
@@ -141,8 +141,9 @@ static int64_t FreeSpaceForFile(const std::string& filename) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t free_space = static_cast<int64_t>(sf.f_bsize) * sf.f_bavail;
|
auto f_bsize = static_cast<int64_t>(sf.f_bsize);
|
||||||
if (sf.f_bsize == 0 || free_space / sf.f_bsize != sf.f_bavail) {
|
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 "
|
LOG(ERROR) << "Invalid block size or overflow (sf.f_bsize " << sf.f_bsize << ", sf.f_bavail "
|
||||||
<< sf.f_bavail << ")";
|
<< sf.f_bavail << ")";
|
||||||
return -1;
|
return -1;
|
||||||
@@ -170,6 +171,13 @@ bool CheckAndFreeSpaceOnCache(size_t bytes) {
|
|||||||
|
|
||||||
bool RemoveFilesInDirectory(size_t bytes_needed, const std::string& dirname,
|
bool RemoveFilesInDirectory(size_t bytes_needed, const std::string& dirname,
|
||||||
const std::function<int64_t(const std::string&)>& space_checker) {
|
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;
|
struct stat st;
|
||||||
if (stat(dirname.c_str(), &st) == -1) {
|
if (stat(dirname.c_str(), &st) == -1) {
|
||||||
PLOG(ERROR) << "Failed to stat " << dirname;
|
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)";
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,7 +238,7 @@ bool RemoveFilesInDirectory(size_t bytes_needed, const std::string& dirname,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LOG(INFO) << "Deleted " << file << "; now " << free_now << " bytes free";
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ static bool ApplyBSDiffPatchAndStreamOutput(const uint8_t* src_data, size_t src_
|
|||||||
const Value& patch, size_t patch_offset,
|
const Value& patch, size_t patch_offset,
|
||||||
const char* deflate_header, SinkFn sink) {
|
const char* deflate_header, SinkFn sink) {
|
||||||
size_t expected_target_length = static_cast<size_t>(Read8(deflate_header + 32));
|
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 level = Read4(deflate_header + 40);
|
||||||
int method = Read4(deflate_header + 44);
|
int method = Read4(deflate_header + 44);
|
||||||
int window_bits = Read4(deflate_header + 48);
|
int window_bits = Read4(deflate_header + 48);
|
||||||
|
|||||||
Reference in New Issue
Block a user