| Index: util/mac/checked_mach_address_range_test.cc
|
| diff --git a/util/mac/checked_mach_address_range_test.cc b/util/mac/checked_mach_address_range_test.cc
|
| index b0f36c3de3b5cebb61a93172b8244101fdf74210..702715d092a0afec4aa4e7c36351cea658821785 100644
|
| --- a/util/mac/checked_mach_address_range_test.cc
|
| +++ b/util/mac/checked_mach_address_range_test.cc
|
| @@ -22,63 +22,70 @@
|
| #include "base/strings/stringprintf.h"
|
| #include "build/build_config.h"
|
| #include "gtest/gtest.h"
|
| -#include "util/mac/process_reader.h"
|
|
|
| namespace crashpad {
|
| namespace test {
|
| namespace {
|
|
|
| -#if defined(ARCH_CPU_64_BITS)
|
| -const bool kValid64Invalid32 = true;
|
| -#else
|
| -const bool kValid64Invalid32 = false;
|
| -#endif
|
| +enum Validity {
|
| + kInvalid = false,
|
| + kValid,
|
| + kValid64Invalid32,
|
| +};
|
| +
|
| +bool ExpectationForValidity32(Validity validity) {
|
| + return validity == kValid;
|
| +}
|
| +
|
| +bool ExpectationForValidity64(Validity validity) {
|
| + return validity == kValid || validity == kValid64Invalid32;
|
| +}
|
|
|
| TEST(CheckedMachAddressRange, IsValid) {
|
| const struct TestData {
|
| mach_vm_address_t base;
|
| mach_vm_size_t size;
|
| - bool valid;
|
| + Validity validity;
|
| } kTestData[] = {
|
| - {0, 0, true},
|
| - {0, 1, true},
|
| - {0, 2, true},
|
| - {0, 0x7fffffff, true},
|
| - {0, 0x80000000, true},
|
| - {0, 0xfffffffe, true},
|
| - {0, 0xffffffff, true},
|
| + {0, 0, kValid},
|
| + {0, 1, kValid},
|
| + {0, 2, kValid},
|
| + {0, 0x7fffffff, kValid},
|
| + {0, 0x80000000, kValid},
|
| + {0, 0xfffffffe, kValid},
|
| + {0, 0xffffffff, kValid},
|
| {0, 0xffffffffffffffff, kValid64Invalid32},
|
| - {1, 0, true},
|
| - {1, 1, true},
|
| - {1, 2, true},
|
| - {1, 0x7fffffff, true},
|
| - {1, 0x80000000, true},
|
| - {1, 0xfffffffe, true},
|
| + {1, 0, kValid},
|
| + {1, 1, kValid},
|
| + {1, 2, kValid},
|
| + {1, 0x7fffffff, kValid},
|
| + {1, 0x80000000, kValid},
|
| + {1, 0xfffffffe, kValid},
|
| {1, 0xffffffff, kValid64Invalid32},
|
| {1, 0xfffffffffffffffe, kValid64Invalid32},
|
| - {1, 0xffffffffffffffff, false},
|
| - {0x7fffffff, 0, true},
|
| - {0x7fffffff, 1, true},
|
| - {0x7fffffff, 2, true},
|
| - {0x7fffffff, 0x7fffffff, true},
|
| - {0x7fffffff, 0x80000000, true},
|
| + {1, 0xffffffffffffffff, kInvalid},
|
| + {0x7fffffff, 0, kValid},
|
| + {0x7fffffff, 1, kValid},
|
| + {0x7fffffff, 2, kValid},
|
| + {0x7fffffff, 0x7fffffff, kValid},
|
| + {0x7fffffff, 0x80000000, kValid},
|
| {0x7fffffff, 0xfffffffe, kValid64Invalid32},
|
| {0x7fffffff, 0xffffffff, kValid64Invalid32},
|
| - {0x80000000, 0, true},
|
| - {0x80000000, 1, true},
|
| - {0x80000000, 2, true},
|
| - {0x80000000, 0x7fffffff, true},
|
| + {0x80000000, 0, kValid},
|
| + {0x80000000, 1, kValid},
|
| + {0x80000000, 2, kValid},
|
| + {0x80000000, 0x7fffffff, kValid},
|
| {0x80000000, 0x80000000, kValid64Invalid32},
|
| {0x80000000, 0xfffffffe, kValid64Invalid32},
|
| {0x80000000, 0xffffffff, kValid64Invalid32},
|
| - {0xfffffffe, 0, true},
|
| - {0xfffffffe, 1, true},
|
| + {0xfffffffe, 0, kValid},
|
| + {0xfffffffe, 1, kValid},
|
| {0xfffffffe, 2, kValid64Invalid32},
|
| {0xfffffffe, 0x7fffffff, kValid64Invalid32},
|
| {0xfffffffe, 0x80000000, kValid64Invalid32},
|
| {0xfffffffe, 0xfffffffe, kValid64Invalid32},
|
| {0xfffffffe, 0xffffffff, kValid64Invalid32},
|
| - {0xffffffff, 0, true},
|
| + {0xffffffff, 0, kValid},
|
| {0xffffffff, 1, kValid64Invalid32},
|
| {0xffffffff, 2, kValid64Invalid32},
|
| {0xffffffff, 0x7fffffff, kValid64Invalid32},
|
| @@ -90,27 +97,24 @@ TEST(CheckedMachAddressRange, IsValid) {
|
| {0x7fffffffffffffff, 2, kValid64Invalid32},
|
| {0x7fffffffffffffff, 0x7fffffffffffffff, kValid64Invalid32},
|
| {0x7fffffffffffffff, 0x8000000000000000, kValid64Invalid32},
|
| - {0x7fffffffffffffff, 0x8000000000000001, false},
|
| - {0x7fffffffffffffff, 0xfffffffffffffffe, false},
|
| - {0x7fffffffffffffff, 0xffffffffffffffff, false},
|
| + {0x7fffffffffffffff, 0x8000000000000001, kInvalid},
|
| + {0x7fffffffffffffff, 0xfffffffffffffffe, kInvalid},
|
| + {0x7fffffffffffffff, 0xffffffffffffffff, kInvalid},
|
| {0x8000000000000000, 0, kValid64Invalid32},
|
| {0x8000000000000000, 1, kValid64Invalid32},
|
| {0x8000000000000000, 2, kValid64Invalid32},
|
| {0x8000000000000000, 0x7fffffffffffffff, kValid64Invalid32},
|
| - {0x8000000000000000, 0x8000000000000000, false},
|
| - {0x8000000000000000, 0x8000000000000001, false},
|
| - {0x8000000000000000, 0xfffffffffffffffe, false},
|
| - {0x8000000000000000, 0xffffffffffffffff, false},
|
| + {0x8000000000000000, 0x8000000000000000, kInvalid},
|
| + {0x8000000000000000, 0x8000000000000001, kInvalid},
|
| + {0x8000000000000000, 0xfffffffffffffffe, kInvalid},
|
| + {0x8000000000000000, 0xffffffffffffffff, kInvalid},
|
| {0xfffffffffffffffe, 0, kValid64Invalid32},
|
| {0xfffffffffffffffe, 1, kValid64Invalid32},
|
| - {0xfffffffffffffffe, 2, false},
|
| + {0xfffffffffffffffe, 2, kInvalid},
|
| {0xffffffffffffffff, 0, kValid64Invalid32},
|
| - {0xffffffffffffffff, 1, false},
|
| + {0xffffffffffffffff, 1, kInvalid},
|
| };
|
|
|
| - ProcessReader process_reader;
|
| - ASSERT_TRUE(process_reader.Initialize(mach_task_self()));
|
| -
|
| for (size_t index = 0; index < arraysize(kTestData); ++index) {
|
| const TestData& testcase = kTestData[index];
|
| SCOPED_TRACE(base::StringPrintf("index %zu, base 0x%llx, size 0x%llx",
|
| @@ -118,16 +122,18 @@ TEST(CheckedMachAddressRange, IsValid) {
|
| testcase.base,
|
| testcase.size));
|
|
|
| - CheckedMachAddressRange range(
|
| - &process_reader, testcase.base, testcase.size);
|
| - EXPECT_EQ(testcase.valid, range.IsValid());
|
| + CheckedMachAddressRange range_32(false, testcase.base, testcase.size);
|
| + EXPECT_EQ(ExpectationForValidity32(testcase.validity), range_32.IsValid());
|
| +
|
| + CheckedMachAddressRange range_64(true, testcase.base, testcase.size);
|
| + EXPECT_EQ(ExpectationForValidity64(testcase.validity), range_64.IsValid());
|
| }
|
| }
|
|
|
| TEST(CheckedMachAddressRange, ContainsValue) {
|
| const struct TestData {
|
| mach_vm_address_t value;
|
| - bool valid;
|
| + bool expectation;
|
| } kTestData[] = {
|
| {0, false},
|
| {1, false},
|
| @@ -156,36 +162,32 @@ TEST(CheckedMachAddressRange, ContainsValue) {
|
| {0xffffffffffffffff, false},
|
| };
|
|
|
| - ProcessReader process_reader;
|
| - ASSERT_TRUE(process_reader.Initialize(mach_task_self()));
|
| -
|
| - CheckedMachAddressRange parent_range(&process_reader, 0x2000, 0x1000);
|
| - ASSERT_TRUE(parent_range.IsValid());
|
| + CheckedMachAddressRange parent_range_32(false, 0x2000, 0x1000);
|
| + ASSERT_TRUE(parent_range_32.IsValid());
|
|
|
| for (size_t index = 0; index < arraysize(kTestData); ++index) {
|
| const TestData& testcase = kTestData[index];
|
| SCOPED_TRACE(
|
| base::StringPrintf("index %zu, value 0x%llx", index, testcase.value));
|
|
|
| - EXPECT_EQ(testcase.valid, parent_range.ContainsValue(testcase.value));
|
| + EXPECT_EQ(testcase.expectation,
|
| + parent_range_32.ContainsValue(testcase.value));
|
| }
|
|
|
| - CheckedMachAddressRange parent_range_64(&process_reader, 0x100000000, 0x1000);
|
| - ASSERT_EQ(kValid64Invalid32, parent_range_64.IsValid());
|
| - if (parent_range_64.IsValid()) {
|
| - EXPECT_FALSE(parent_range_64.ContainsValue(0xffffffff));
|
| - EXPECT_TRUE(parent_range_64.ContainsValue(0x100000000));
|
| - EXPECT_TRUE(parent_range_64.ContainsValue(0x100000001));
|
| - EXPECT_TRUE(parent_range_64.ContainsValue(0x100000fff));
|
| - EXPECT_FALSE(parent_range_64.ContainsValue(0x100001000));
|
| - }
|
| + CheckedMachAddressRange parent_range_64(true, 0x100000000, 0x1000);
|
| + ASSERT_TRUE(parent_range_64.IsValid());
|
| + EXPECT_FALSE(parent_range_64.ContainsValue(0xffffffff));
|
| + EXPECT_TRUE(parent_range_64.ContainsValue(0x100000000));
|
| + EXPECT_TRUE(parent_range_64.ContainsValue(0x100000001));
|
| + EXPECT_TRUE(parent_range_64.ContainsValue(0x100000fff));
|
| + EXPECT_FALSE(parent_range_64.ContainsValue(0x100001000));
|
| }
|
|
|
| TEST(CheckedMachAddressRange, ContainsRange) {
|
| const struct TestData {
|
| mach_vm_address_t base;
|
| mach_vm_size_t size;
|
| - bool valid;
|
| + bool expectation;
|
| } kTestData[] = {
|
| {0, 0, false},
|
| {0, 1, false},
|
| @@ -217,11 +219,8 @@ TEST(CheckedMachAddressRange, ContainsRange) {
|
| {0x3001, 1, false},
|
| };
|
|
|
| - ProcessReader process_reader;
|
| - ASSERT_TRUE(process_reader.Initialize(mach_task_self()));
|
| -
|
| - CheckedMachAddressRange parent_range(&process_reader, 0x2000, 0x1000);
|
| - ASSERT_TRUE(parent_range.IsValid());
|
| + CheckedMachAddressRange parent_range_32(false, 0x2000, 0x1000);
|
| + ASSERT_TRUE(parent_range_32.IsValid());
|
|
|
| for (size_t index = 0; index < arraysize(kTestData); ++index) {
|
| const TestData& testcase = kTestData[index];
|
| @@ -230,27 +229,26 @@ TEST(CheckedMachAddressRange, ContainsRange) {
|
| testcase.base,
|
| testcase.size));
|
|
|
| - CheckedMachAddressRange child_range(
|
| - &process_reader, testcase.base, testcase.size);
|
| - ASSERT_TRUE(child_range.IsValid());
|
| - EXPECT_EQ(testcase.valid, parent_range.ContainsRange(child_range));
|
| + CheckedMachAddressRange child_range_32(false, testcase.base, testcase.size);
|
| + ASSERT_TRUE(child_range_32.IsValid());
|
| + EXPECT_EQ(testcase.expectation,
|
| + parent_range_32.ContainsRange(child_range_32));
|
| }
|
|
|
| - CheckedMachAddressRange parent_range_64(&process_reader, 0x100000000, 0x1000);
|
| - ASSERT_EQ(kValid64Invalid32, parent_range_64.IsValid());
|
| - if (parent_range_64.IsValid()) {
|
| - CheckedMachAddressRange child_range_64(&process_reader, 0xffffffff, 2);
|
| - EXPECT_FALSE(parent_range_64.ContainsRange(child_range_64));
|
| + CheckedMachAddressRange parent_range_64(true, 0x100000000, 0x1000);
|
| + ASSERT_TRUE(parent_range_64.IsValid());
|
|
|
| - child_range_64.SetRange(&process_reader, 0x100000000, 2);
|
| - EXPECT_TRUE(parent_range_64.ContainsRange(child_range_64));
|
| + CheckedMachAddressRange child_range_64(true, 0xffffffff, 2);
|
| + EXPECT_FALSE(parent_range_64.ContainsRange(child_range_64));
|
|
|
| - child_range_64.SetRange(&process_reader, 0x100000ffe, 2);
|
| - EXPECT_TRUE(parent_range_64.ContainsRange(child_range_64));
|
| + child_range_64.SetRange(true, 0x100000000, 2);
|
| + EXPECT_TRUE(parent_range_64.ContainsRange(child_range_64));
|
|
|
| - child_range_64.SetRange(&process_reader, 0x100000fff, 2);
|
| - EXPECT_FALSE(parent_range_64.ContainsRange(child_range_64));
|
| - }
|
| + child_range_64.SetRange(true, 0x100000ffe, 2);
|
| + EXPECT_TRUE(parent_range_64.ContainsRange(child_range_64));
|
| +
|
| + child_range_64.SetRange(true, 0x100000fff, 2);
|
| + EXPECT_FALSE(parent_range_64.ContainsRange(child_range_64));
|
| }
|
|
|
| } // namespace
|
|
|