aboutsummaryrefslogtreecommitdiff
path: root/bfd/mach-o.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-02-19 13:12:52 +1030
committerAlan Modra <amodra@gmail.com>2020-02-19 13:12:52 +1030
commit96d3b80f5498c0aa40099f37f6384f2041df045f (patch)
treeaf27c606e933b65af33c3fdd2e02cc6ef0dff8c3 /bfd/mach-o.c
parent986f078366b193ed9f5bd02af965f3af958ba859 (diff)
downloadgdb-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.c8
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;