elfcopy: fix PE object section name corruption and crash
Fixed a bug that the PE object section names are generated incorrectly using the section name table found in the original input ELF object instead of the intermediate ELF object. Ticket: #541 Do not try to copy section content from a NULL d_buf when creating uninitialized data COFF section for PE object. Ticket: #540 Obtained from: ELF Tool Chain r3507, r3508 MFC after: 1 week
This commit is contained in:
parent
dad99db247
commit
d0aa56451e
@ -70,7 +70,7 @@ create_pe(struct elfcopy *ecp, int ifd, int ofd)
|
||||
errx(EXIT_FAILURE, "gelf_getehdr() failed: %s",
|
||||
elf_errmsg(-1));
|
||||
|
||||
if (elf_getshstrndx(ecp->ein, &indx) == 0)
|
||||
if (elf_getshstrndx(e, &indx) == 0)
|
||||
errx(EXIT_FAILURE, "elf_getshstrndx() failed: %s",
|
||||
elf_errmsg(-1));
|
||||
|
||||
@ -124,7 +124,7 @@ create_pe(struct elfcopy *ecp, int ifd, int ofd)
|
||||
(void) elf_errno();
|
||||
continue;
|
||||
}
|
||||
if ((name = elf_strptr(ecp->ein, indx, sh.sh_name)) ==
|
||||
if ((name = elf_strptr(e, indx, sh.sh_name)) ==
|
||||
NULL) {
|
||||
warnx("elf_strptr() failed: %s", elf_errmsg(-1));
|
||||
(void) elf_errno();
|
||||
@ -210,12 +210,14 @@ create_pe(struct elfcopy *ecp, int ifd, int ofd)
|
||||
}
|
||||
pb->pb_align = 1;
|
||||
pb->pb_off = 0;
|
||||
pb->pb_size = roundup(sh.sh_size, poh.oh_filealign);
|
||||
if ((pb->pb_buf = calloc(1, pb->pb_size)) == NULL) {
|
||||
warn("calloc failed");
|
||||
continue;
|
||||
if (sh.sh_type != SHT_NOBITS) {
|
||||
pb->pb_size = roundup(sh.sh_size, poh.oh_filealign);
|
||||
if ((pb->pb_buf = calloc(1, pb->pb_size)) == NULL) {
|
||||
warn("calloc failed");
|
||||
continue;
|
||||
}
|
||||
memcpy(pb->pb_buf, d->d_buf, sh.sh_size);
|
||||
}
|
||||
memcpy(pb->pb_buf, d->d_buf, sh.sh_size);
|
||||
}
|
||||
elferr = elf_errno();
|
||||
if (elferr != 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user