aboutsummaryrefslogtreecommitdiff
path: root/patch_read_write_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'patch_read_write_unittest.cc')
-rw-r--r--patch_read_write_unittest.cc80
1 files changed, 71 insertions, 9 deletions
diff --git a/patch_read_write_unittest.cc b/patch_read_write_unittest.cc
index 627513c..25e1fb0 100644
--- a/patch_read_write_unittest.cc
+++ b/patch_read_write_unittest.cc
@@ -63,6 +63,7 @@ ByteVector CreatePatchElement() {
0x03, 0, 0, 0, // new_offset
0x13, 0, 0, 0, // new_length
'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86
+ 0x01, 0x00, // element version
// EquivalenceSource
1, 0, 0, 0, // src_skip size
0x10, // src_skip content
@@ -95,11 +96,12 @@ ByteVector CreatePatchElement() {
ByteVector CreateElementMatch() {
return {
// PatchElementHeader
- 0x01, 0, 0, 0, // old_offset
- 0x02, 0, 0, 0, // old_length
- 0x03, 0, 0, 0, // new_offset
- 0x04, 0, 0, 0, // new_length
- 'D', 'E', 'X', ' ', // exe_type = kExeTypeDex
+ 0x01, 0, 0, 0, // old_offset
+ 0x02, 0, 0, 0, // old_length
+ 0x03, 0, 0, 0, // new_offset
+ 0x04, 0, 0, 0, // new_length
+ 'D', 'E', 'X', ' ', // exe_type = kExeTypeDex
+ 0x01, 0x00, // element version
};
}
@@ -586,10 +588,26 @@ TEST(PatchElementTest, WrongExtraData) {
}
}
+TEST(PatchElementTest, WrongVersion) {
+ // Bump element version to 2.
+ {
+ ByteVector data = CreatePatchElement();
+ ModifyByte(offsetof(PatchElementHeader, version), 0x01, 0x02, &data);
+ TestInvalidInitialize<PatchElementReader>(&data);
+ }
+ // Bump element version to 0.
+ {
+ ByteVector data = CreatePatchElement();
+ ModifyByte(offsetof(PatchElementHeader, version), 0x01, 0x00, &data);
+ TestInvalidInitialize<PatchElementReader>(&data);
+ }
+}
+
TEST(EnsemblePatchTest, RawPatch) {
ByteVector data = {
// PatchHeader
- 0x5A, 0x75, 0x63, 0x00, // magic
+ 0x5A, 0x75, 0x63, 0x63, // magic
+ 0x01, 0x00, 0x00, 0x00, // major/minor version
0x10, 0x32, 0x54, 0x76, // old_size
0x00, 0x11, 0x22, 0x33, // old_crc
0x01, 0, 0, 0, // new_size
@@ -602,7 +620,8 @@ TEST(EnsemblePatchTest, RawPatch) {
0x02, 0, 0, 0, // old_length
0x00, 0, 0, 0, // new_offset
0x01, 0, 0, 0, // new_length
- 'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86
+ 'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X8
+ 0x01, 0x00, // element version
// EquivalenceSource
0, 0, 0, 0, // src_skip size
0, 0, 0, 0, // dst_skip size
@@ -624,6 +643,8 @@ TEST(EnsemblePatchTest, RawPatch) {
PatchHeader header = ensemble_patch_reader.header();
EXPECT_EQ(PatchHeader::kMagic, header.magic);
+ EXPECT_EQ(kMajorVersion, header.major_version);
+ EXPECT_EQ(kMinorVersion, header.minor_version);
EXPECT_EQ(0x76543210U, header.old_size);
EXPECT_EQ(0x33221100U, header.old_crc);
EXPECT_EQ(0x01U, header.new_size);
@@ -647,7 +668,8 @@ TEST(EnsemblePatchTest, RawPatch) {
TEST(EnsemblePatchTest, CheckFile) {
ByteVector data = {
// PatchHeader
- 0x5A, 0x75, 0x63, 0x00, // magic
+ 0x5A, 0x75, 0x63, 0x63, // magic
+ 0x01, 0x00, 0x00, 0x00, // major/minor version
0x05, 0x00, 0x00, 0x00, // old_size
0xDF, 0x13, 0xE4, 0x10, // old_crc
0x03, 0x00, 0x00, 0x00, // new_size
@@ -661,6 +683,7 @@ TEST(EnsemblePatchTest, CheckFile) {
0x00, 0, 0, 0, // new_offset
0x03, 0, 0, 0, // new_length
'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86
+ 0x01, 0x00, // element version
// EquivalenceSource
0, 0, 0, 0, // src_skip size
0, 0, 0, 0, // dst_skip size
@@ -695,7 +718,45 @@ TEST(EnsemblePatchTest, CheckFile) {
TEST(EnsemblePatchTest, InvalidMagic) {
ByteVector data = {
// PatchHeader
- 0x42, 0x42, 0x42, 0x00, // magic
+ 0x42, 0x42, 0x42, 0x42, // magic
+ 0x01, 0x00, 0x00, 0x00, // major/minor version
+ 0x10, 0x32, 0x54, 0x76, // old_size
+ 0x00, 0x11, 0x22, 0x33, // old_crc
+ 0x03, 0x00, 0x00, 0x00, // new_size
+ 0x44, 0x55, 0x66, 0x77, // new_crc
+
+ 1, 0, 0, 0, // number of element
+
+ // PatchElementHeader
+ 0x01, 0, 0, 0, // old_offset
+ 0x02, 0, 0, 0, // old_length
+ 0x00, 0, 0, 0, // new_offset
+ 0x03, 0, 0, 0, // new_length
+ 'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86
+ 0x01, 0x00, // element version
+ // EquivalenceSource
+ 0, 0, 0, 0, // src_skip size
+ 0, 0, 0, 0, // dst_skip size
+ 0, 0, 0, 0, // copy_count size
+ // ExtraDataSource
+ 0, 0, 0, 0, // extra_data size
+ // RawDeltaSource
+ 0, 0, 0, 0, // raw_delta_skip size
+ 0, 0, 0, 0, // raw_delta_diff size
+ // ReferenceDeltaSource
+ 0, 0, 0, 0, // reference_delta size
+ // PatchElementReader
+ 0, 0, 0, 0, // pool count
+ };
+
+ TestInvalidInitialize<EnsemblePatchReader>(&data);
+}
+
+TEST(EnsemblePatchTest, InvalidVersion) {
+ ByteVector data = {
+ // PatchHeader
+ 0x5A, 0x75, 0x63, 0x63, // magic
+ 0x02, 0x01, 0x00, 0x00, // major/minor version
0x10, 0x32, 0x54, 0x76, // old_size
0x00, 0x11, 0x22, 0x33, // old_crc
0x03, 0x00, 0x00, 0x00, // new_size
@@ -709,6 +770,7 @@ TEST(EnsemblePatchTest, InvalidMagic) {
0x00, 0, 0, 0, // new_offset
0x03, 0, 0, 0, // new_length
'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86
+ 0x01, 0x00, // element version
// EquivalenceSource
0, 0, 0, 0, // src_skip size
0, 0, 0, 0, // dst_skip size