mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 01:07:52 +00:00
Miscellaneous memory alloc related fixes
Some minor tidies. Allocating memory for internal relocs and symbols after reading external relocs is slightly better with fuzzed files. You can at least do something about silly sizes that way. * aoutx.h (slurp_reloc_table): Allocate reloc_cache after reading external relocs. * ecoff.c (ecoff_slurp_reloc_table): Likewise. * archive.c (_bfd_write_archive_contents): Don't twiddle bfd_error after bfd_bread. * archive64.c (_bfd_archive_64_bit_slurp_armap): Remove unnecessary bfd_release. * elf32-m32c.c (m32c_offset_for_reloc): Make shndx_buf a bfd_byte*. (m32c_elf_relax_section): Likewise. * elf32-rl78.c (rl78_offset_for_reloc): Likewise. (rl78_elf_relax_section): Likewise. * elf32-rx.c (rx_offset_for_reloc): Likewise. (elf32_rx_relax_section): Likewise. * mach-o.c (bfd_mach_o_alloc_and_read): Move earlier with better parameter types and use.. (bfd_mach_o_read_dylinker, bfd_mach_o_read_dylib), (bfd_mach_o_read_fvmlib, bfd_mach_o_read_str): ..in these functions. * peicode.h (pe_bfd_object_p): Don't zero the part of opthdr being read from file, just the extra. * som.c (som_slurp_symbol_table): Allocate internal symbol buffer after reading external syms. Free on failure.
This commit is contained in:
@@ -1408,7 +1408,7 @@ pe_bfd_object_p (bfd * abfd)
|
||||
struct external_PEI_IMAGE_hdr image_hdr;
|
||||
struct internal_filehdr internal_f;
|
||||
struct internal_aouthdr internal_a;
|
||||
file_ptr opt_hdr_size;
|
||||
bfd_size_type opt_hdr_size;
|
||||
file_ptr offset;
|
||||
const bfd_target *result;
|
||||
|
||||
@@ -1494,12 +1494,14 @@ pe_bfd_object_p (bfd * abfd)
|
||||
if (amt < sizeof (PEAOUTHDR))
|
||||
amt = sizeof (PEAOUTHDR);
|
||||
|
||||
opthdr = bfd_zalloc (abfd, amt);
|
||||
opthdr = bfd_alloc (abfd, amt);
|
||||
if (opthdr == NULL)
|
||||
return NULL;
|
||||
if (bfd_bread (opthdr, opt_hdr_size, abfd)
|
||||
!= (bfd_size_type) opt_hdr_size)
|
||||
return NULL;
|
||||
if (amt > opt_hdr_size)
|
||||
memset (opthdr + opt_hdr_size, 0, amt - opt_hdr_size);
|
||||
|
||||
bfd_set_error (bfd_error_no_error);
|
||||
bfd_coff_swap_aouthdr_in (abfd, opthdr, & internal_a);
|
||||
|
||||
Reference in New Issue
Block a user