summaryrefslogtreecommitdiffstats
path: root/tests/component/imgdiff_test.cpp
diff options
context:
space:
mode:
authorTianjie Xu <xunchang@google.com>2017-07-07 19:52:26 +0200
committerandroid-build-merger <android-build-merger@google.com>2017-07-07 19:52:26 +0200
commit8542502f1f6db152e85ad47aeb21ea91df4cdea2 (patch)
treecfbb4ec8da4a053c64c9fa8f86df3b748f319fa8 /tests/component/imgdiff_test.cpp
parentMerge "Update ScreenRecoveryUI::Draw* function signatures." (diff)
parentMerge "Fix a rare failure for imgdiff when random data equals gzip header" (diff)
downloadandroid_bootable_recovery-8542502f1f6db152e85ad47aeb21ea91df4cdea2.tar
android_bootable_recovery-8542502f1f6db152e85ad47aeb21ea91df4cdea2.tar.gz
android_bootable_recovery-8542502f1f6db152e85ad47aeb21ea91df4cdea2.tar.bz2
android_bootable_recovery-8542502f1f6db152e85ad47aeb21ea91df4cdea2.tar.lz
android_bootable_recovery-8542502f1f6db152e85ad47aeb21ea91df4cdea2.tar.xz
android_bootable_recovery-8542502f1f6db152e85ad47aeb21ea91df4cdea2.tar.zst
android_bootable_recovery-8542502f1f6db152e85ad47aeb21ea91df4cdea2.zip
Diffstat (limited to 'tests/component/imgdiff_test.cpp')
-rw-r--r--tests/component/imgdiff_test.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/component/imgdiff_test.cpp b/tests/component/imgdiff_test.cpp
index 6f5960bbd..bf25aebb0 100644
--- a/tests/component/imgdiff_test.cpp
+++ b/tests/component/imgdiff_test.cpp
@@ -328,6 +328,39 @@ TEST(ImgdiffTest, image_mode_simple) {
verify_patched_image(src, patch, tgt);
}
+TEST(ImgdiffTest, image_mode_bad_gzip) {
+ // Modify the uncompressed length in the gzip footer.
+ const std::vector<char> src_data = { 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+ 'h', '\x1f', '\x8b', '\x08', '\x00', '\xc4', '\x1e',
+ '\x53', '\x58', '\x00', '\x03', '\xab', '\xa8', '\xac',
+ '\x02', '\x00', '\x67', '\xba', '\x8e', '\xeb', '\x03',
+ '\xff', '\xff', '\xff' };
+ const std::string src(src_data.cbegin(), src_data.cend());
+ TemporaryFile src_file;
+ ASSERT_TRUE(android::base::WriteStringToFile(src, src_file.path));
+
+ // Modify the uncompressed length in the gzip footer.
+ const std::vector<char> tgt_data = {
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'x', 'y', 'z', '\x1f', '\x8b',
+ '\x08', '\x00', '\x62', '\x1f', '\x53', '\x58', '\x00', '\x03', '\xab', '\xa8', '\xa8', '\xac',
+ '\xac', '\xaa', '\x02', '\x00', '\x96', '\x30', '\x06', '\xb7', '\x06', '\xff', '\xff', '\xff'
+ };
+ const std::string tgt(tgt_data.cbegin(), tgt_data.cend());
+ TemporaryFile tgt_file;
+ ASSERT_TRUE(android::base::WriteStringToFile(tgt, tgt_file.path));
+
+ TemporaryFile patch_file;
+ std::vector<const char*> args = {
+ "imgdiff", src_file.path, tgt_file.path, patch_file.path,
+ };
+ ASSERT_EQ(0, imgdiff(args.size(), args.data()));
+
+ // Verify.
+ std::string patch;
+ ASSERT_TRUE(android::base::ReadFileToString(patch_file.path, &patch));
+ verify_patched_image(src, patch, tgt);
+}
+
TEST(ImgdiffTest, image_mode_different_num_chunks) {
// src: "abcdefgh" + gzipped "xyz" (echo -n "xyz" | gzip -f | hd) + gzipped "test".
const std::vector<char> src_data = {