diff options
author | Alan Modra <amodra@gmail.com> | 2020-02-19 13:12:52 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-02-19 13:12:52 +1030 |
commit | 96d3b80f5498c0aa40099f37f6384f2041df045f (patch) | |
tree | af27c606e933b65af33c3fdd2e02cc6ef0dff8c3 /bfd/mach-o.c | |
parent | 986f078366b193ed9f5bd02af965f3af958ba859 (diff) | |
download | gdb-96d3b80f5498c0aa40099f37f6384f2041df045f.zip gdb-96d3b80f5498c0aa40099f37f6384f2041df045f.tar.gz gdb-96d3b80f5498c0aa40099f37f6384f2041df045f.tar.bz2 |
Check return status of memory alloc functions
This fixes a number of places that call a memory allocation function
without checking for a NULL return before using.
* mach-o.c (bfd_mach_o_flatten_sections): Return a bfd_boolean,
FALSE if memory alloc fails. Adjust calls.
* som.c (som_prep_for_fixups): Likewise.
* vms-alpha.c (alpha_vms_add_fixup_lp, alpha_vms_add_fixup_ca),
(alpha_vms_add_fixup_qr, alpha_vms_add_fixup_lr),
(alpha_vms_add_lw_reloc, alpha_vms_add_qw_reloc): Likewise.
* som.c (som_build_and_write_symbol_table): Return via error_return
on seek failure.
* vms-alpha.c (VEC_APPEND): Adjust for vector_grow1 changes.
(VEC_APPEND_EL): Delete.
(vector_grow1): Return pointer to element. Catch overflow.
Return NULL on memory allocation failure.
(alpha_vms_add_fixup_lp): Replace VEC_APPEND_EL with VEC_APPEND.
(alpha_vms_add_fixup_ca): Likewise.
(alpha_vms_link_add_object_symbols): Check VEC_APPEND result
before using.
* elf.c (bfd_section_from_shdr): Check bfd_zalloc2 result.
Diffstat (limited to 'bfd/mach-o.c')
-rw-r--r-- | bfd/mach-o.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/bfd/mach-o.c b/bfd/mach-o.c index c1ef64e..a18c68c 100644 --- a/bfd/mach-o.c +++ b/bfd/mach-o.c @@ -4999,7 +4999,7 @@ bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command) return TRUE; } -static void +static bfd_boolean bfd_mach_o_flatten_sections (bfd *abfd) { bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); @@ -5023,6 +5023,8 @@ bfd_mach_o_flatten_sections (bfd *abfd) /* Allocate sections array. */ mdata->sections = bfd_alloc2 (abfd, mdata->nsects, sizeof (bfd_mach_o_section *)); + if (mdata->sections == NULL && mdata->nsects != 0) + return FALSE; /* Fill the array. */ csect = 0; @@ -5041,6 +5043,7 @@ bfd_mach_o_flatten_sections (bfd *abfd) mdata->sections[csect++] = sec; } } + return TRUE; } static bfd_boolean @@ -5220,7 +5223,8 @@ bfd_mach_o_scan (bfd *abfd, } /* Sections should be flatten before scanning start address. */ - bfd_mach_o_flatten_sections (abfd); + if (!bfd_mach_o_flatten_sections (abfd)) + return FALSE; if (!bfd_mach_o_scan_start_address (abfd)) return FALSE; |