Merge "Fix off-by-one in ReadBuildIDFromMemory." am: bc1a6191f1
am: 5bdee1788c
Change-Id: Ibe26b85a455606f440050d60abaa0590d63daa2b
This commit is contained in:
commit
97e2f4f796
2 changed files with 12 additions and 7 deletions
|
@ -662,7 +662,7 @@ std::string ElfInterface::ReadBuildIDFromMemory(Memory* memory) {
|
|||
if (note_size - offset < hdr.n_descsz || hdr.n_descsz == 0) {
|
||||
return "";
|
||||
}
|
||||
std::string build_id(hdr.n_descsz - 1, '\0');
|
||||
std::string build_id(hdr.n_descsz, '\0');
|
||||
if (memory->ReadFully(note_offset + offset, &build_id[0], hdr.n_descsz)) {
|
||||
return build_id;
|
||||
}
|
||||
|
|
|
@ -142,15 +142,14 @@ static void InitElfData(int fd) {
|
|||
|
||||
char note_section[128];
|
||||
Elf32_Nhdr note_header = {};
|
||||
note_header.n_namesz = 4; // "GNU"
|
||||
note_header.n_descsz = 12; // "ELF_BUILDID"
|
||||
note_header.n_namesz = sizeof("GNU");
|
||||
note_header.n_descsz = sizeof("ELF_BUILDID") - 1;
|
||||
note_header.n_type = NT_GNU_BUILD_ID;
|
||||
memcpy(¬e_section, ¬e_header, sizeof(note_header));
|
||||
size_t note_offset = sizeof(note_header);
|
||||
memcpy(¬e_section[note_offset], "GNU", sizeof("GNU"));
|
||||
note_offset += sizeof("GNU");
|
||||
memcpy(¬e_section[note_offset], "ELF_BUILDID", sizeof("ELF_BUILDID"));
|
||||
note_offset += sizeof("ELF_BUILDID");
|
||||
memcpy(¬e_section[note_offset], "GNU", note_header.n_namesz);
|
||||
note_offset += note_header.n_namesz;
|
||||
memcpy(¬e_section[note_offset], "ELF_BUILDID", note_header.n_descsz);
|
||||
|
||||
Elf32_Shdr shdr = {};
|
||||
shdr.sh_type = SHT_NOTE;
|
||||
|
@ -195,4 +194,10 @@ TEST_F(MapInfoGetBuildIDTest, multiple_thread_elf_exists_in_memory) {
|
|||
MultipleThreadTest("ELF_BUILDID");
|
||||
}
|
||||
|
||||
TEST_F(MapInfoGetBuildIDTest, real_elf) {
|
||||
MapInfo map_info(nullptr, nullptr, 0x1000, 0x20000, 0, PROT_READ | PROT_WRITE,
|
||||
TestGetFileDirectory() + "offline/empty_arm64/libc.so");
|
||||
EXPECT_EQ("6df0590c4920f4c7b9f34fe833f37d54", map_info.GetPrintableBuildID());
|
||||
}
|
||||
|
||||
} // namespace unwindstack
|
||||
|
|
Loading…
Reference in a new issue