Print SHA1 of the patch if bsdiff fails with data error

This will help us to identify the patch corruption.

Meanwhile fix a wrong size parameter passed to bspatch.
(patch->data.size() into patch->data.size() - patch_offset).

Also remove the only usage of "ApplyBSDiffPatchMem()" and inline its
Sink function for simplicity.

Bug: 37855643
Test: Prints SHA1 for corrupted patch in imgdiff_test.
Change-Id: Ibf2db8c08b0ded1409bb7c91a3547a6bf99c601d
This commit is contained in:
Tianjie Xu
2017-05-16 12:39:14 -07:00
parent 7cb1b79673
commit ce5fa5e538
4 changed files with 71 additions and 22 deletions
+8 -6
View File
@@ -200,12 +200,14 @@ int ApplyImagePatch(const unsigned char* old_data, size_t old_size, const Value*
}
// Next, apply the bsdiff patch (in memory) to the uncompressed data.
std::vector<unsigned char> uncompressed_target_data;
// TODO(senj): Remove the only usage of ApplyBSDiffPatchMem here,
// replace it with ApplyBSDiffPatch with a custom sink function that
// wraps the given sink function to stream output to save memory.
if (ApplyBSDiffPatchMem(expanded_source.data(), expanded_len, patch, patch_offset,
&uncompressed_target_data) != 0) {
std::vector<uint8_t> uncompressed_target_data;
// TODO: replace the custom sink function passed into ApplyBSDiffPatch so that it wraps the
// given sink function to stream output to save memory.
if (ApplyBSDiffPatch(expanded_source.data(), expanded_len, patch, patch_offset,
[&uncompressed_target_data](const uint8_t* data, size_t len) {
uncompressed_target_data.insert(uncompressed_target_data.end(), data, data + len);
return len;
}, nullptr) != 0) {
return -1;
}
if (uncompressed_target_data.size() != target_len) {