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

Commit 0da25d6f authored by Christopher Ferris's avatar Christopher Ferris Committed by android-build-merger
Browse files

Merge "Fix some memory leaks, potential errors." am: 9d239ec6

am: 60d67714

Change-Id: I184799dd198d6469326f0c07dfb15a5323e9af69
parents 234fae28 60d67714
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -71,16 +71,18 @@ bool Maps::ParseLine(const char* line, MapInfo* map_info) {
    map_info->flags |= PROT_EXEC;
  }

  if (line[name_pos] != '\0') {
    map_info->name = &line[name_pos];
    size_t length = map_info->name.length() - 1;
    if (map_info->name[length] == '\n') {
      map_info->name.erase(length);
    }

    // Mark a device map in /dev/and not in /dev/ashmem/ specially.
  if (!map_info->name.empty() && map_info->name.substr(0, 5) == "/dev/" &&
      map_info->name.substr(5, 7) != "ashmem/") {
    if (map_info->name.substr(0, 5) == "/dev/" && map_info->name.substr(5, 7) != "ashmem/") {
      map_info->flags |= MAPS_FLAGS_DEVICE_MAP;
    }
  }

  return true;
}
+3 −3
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ TEST_F(MapInfoTest, end_le_start) {
  // Make sure this test is valid.
  info.end = 0x101;
  memory.reset(info.CreateMemory(getpid()));
  ASSERT_FALSE(info.CreateMemory(getpid()) == nullptr);
  ASSERT_TRUE(memory.get() != nullptr);
}

// Verify that if the offset is non-zero but there is no elf at the offset,
@@ -212,8 +212,8 @@ TEST_F(MapInfoTest, get_elf) {
  MapInfo info{.start = start, .end = start + 1024, .offset = 0, .name = ""};

  // The map contains garbage, but this should still produce an elf object.
  Elf* elf = info.GetElf(getpid(), false);
  ASSERT_TRUE(elf != nullptr);
  std::unique_ptr<Elf> elf(info.GetElf(getpid(), false));
  ASSERT_TRUE(elf.get() != nullptr);
  ASSERT_FALSE(elf->valid());

  ASSERT_EQ(0, munmap(map, 1024));
+9 −16
Original line number Diff line number Diff line
@@ -26,21 +26,13 @@

#include "MemoryFake.h"

class MemoryRangeTest : public ::testing::Test {
 protected:
  void SetUp() override {
    memory_ = new MemoryFake;
  }

  MemoryFake* memory_;
};

TEST_F(MemoryRangeTest, read) {
TEST(MemoryRangeTest, read) {
  std::vector<uint8_t> src(1024);
  memset(src.data(), 0x4c, 1024);
  memory_->SetMemory(9001, src);
  MemoryFake* memory = new MemoryFake;
  memory->SetMemory(9001, src);

  MemoryRange range(memory_, 9001, 9001 + src.size());
  MemoryRange range(memory, 9001, 9001 + src.size());

  std::vector<uint8_t> dst(1024);
  ASSERT_TRUE(range.Read(0, dst.data(), src.size()));
@@ -49,12 +41,13 @@ TEST_F(MemoryRangeTest, read) {
  }
}

TEST_F(MemoryRangeTest, read_near_limit) {
TEST(MemoryRangeTest, read_near_limit) {
  std::vector<uint8_t> src(4096);
  memset(src.data(), 0x4c, 4096);
  memory_->SetMemory(1000, src);
  MemoryFake* memory = new MemoryFake;
  memory->SetMemory(1000, src);

  MemoryRange range(memory_, 1000, 2024);
  MemoryRange range(memory, 1000, 2024);

  std::vector<uint8_t> dst(1024);
  ASSERT_TRUE(range.Read(1020, dst.data(), 4));
@@ -71,7 +64,7 @@ TEST_F(MemoryRangeTest, read_near_limit) {
  ASSERT_TRUE(range.Read(1020, dst.data(), 4));
}

TEST_F(MemoryRangeTest, read_overflow) {
TEST(MemoryRangeTest, read_overflow) {
  std::vector<uint8_t> buffer(100);

  std::unique_ptr<MemoryRange> overflow(new MemoryRange(new MemoryFakeAlwaysReadZero, 100, 200));