Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a39aaf91 authored by Christopher Ferris's avatar Christopher Ferris
Browse files

Remove CHECK in AdjustEncodedValue.

The CHECK(encoding != DW_EH_PE_aligned) can trip given the right
arguments. This check isn't necessary, since the code will return
false in that case.

Add new unit test that tries all values to make sure no CHECK fires.

Bug: 120968571

Test: Passes new unit test, and passes fuzzing that failed before.
Change-Id: I062bcd18508c75cd3a4ca9dd12f922e25aafda8a
parent 38ff8081
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -104,7 +104,6 @@ size_t DwarfMemory::GetEncodedSize(uint8_t encoding) {


bool DwarfMemory::AdjustEncodedValue(uint8_t encoding, uint64_t* value) {
bool DwarfMemory::AdjustEncodedValue(uint8_t encoding, uint64_t* value) {
  CHECK((encoding & 0x0f) == 0);
  CHECK((encoding & 0x0f) == 0);
  CHECK(encoding != DW_EH_PE_aligned);


  // Handle the encoding.
  // Handle the encoding.
  switch (encoding) {
  switch (encoding) {
+23 −0
Original line number Original line Diff line number Diff line
@@ -54,6 +54,8 @@ class DwarfMemoryTest : public ::testing::Test {
  void ReadEncodedValue_overflow();
  void ReadEncodedValue_overflow();
  template <typename AddressType>
  template <typename AddressType>
  void ReadEncodedValue_high_bit_set();
  void ReadEncodedValue_high_bit_set();
  template <typename AddressType>
  void ReadEncodedValue_all();


  MemoryFake memory_;
  MemoryFake memory_;
  std::unique_ptr<DwarfMemory> dwarf_mem_;
  std::unique_ptr<DwarfMemory> dwarf_mem_;
@@ -457,6 +459,27 @@ TEST_F(DwarfMemoryTest, ReadEncodedValue_high_bit_set_uint64_t) {
  ReadEncodedValue_high_bit_set<uint64_t>();
  ReadEncodedValue_high_bit_set<uint64_t>();
}
}


template <typename AddressType>
void DwarfMemoryTest::ReadEncodedValue_all() {
  MemoryFakeAlwaysReadZero memory;
  DwarfMemory dwarf_mem(&memory);

  for (size_t i = 0; i <= 0xff; i++) {
    uint64_t value;
    if (dwarf_mem.ReadEncodedValue<AddressType>(static_cast<uint8_t>(i), &value)) {
      ASSERT_EQ(0U, value);
    }
  }
}

TEST_F(DwarfMemoryTest, ReadEncodedValue_all_uint32_t) {
  ReadEncodedValue_all<uint32_t>();
}

TEST_F(DwarfMemoryTest, ReadEncodedValue_all_uint64_t) {
  ReadEncodedValue_all<uint64_t>();
}

TEST_F(DwarfMemoryTest, AdjustEncodedValue_absptr) {
TEST_F(DwarfMemoryTest, AdjustEncodedValue_absptr) {
  uint64_t value = 0x1234;
  uint64_t value = 0x1234;
  ASSERT_TRUE(dwarf_mem_->AdjustEncodedValue(0x00, &value));
  ASSERT_TRUE(dwarf_mem_->AdjustEncodedValue(0x00, &value));