diff options
Diffstat (limited to 'bfd/sunos.c')
-rw-r--r-- | bfd/sunos.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/bfd/sunos.c b/bfd/sunos.c index 7f62a33..59ea757 100644 --- a/bfd/sunos.c +++ b/bfd/sunos.c @@ -85,6 +85,11 @@ sunos_read_dynamic_info (abfd) info = ((struct sunos_dynamic_info *) bfd_zalloc (abfd, sizeof (struct sunos_dynamic_info))); + if (!info) + { + bfd_error = no_memory; + return false; + } info->valid = false; info->dynsym = NULL; info->dynstr = NULL; @@ -203,6 +208,11 @@ MY(read_dynamic_symbols) (abfd, syms, strs, strsize) (info->dynsym_count * EXTERNAL_NLIST_SIZE))); info->dynstr = (char *) bfd_alloc (abfd, info->dyninfo.ld_symb_size); + if (!info->dynsym || !info->dynstr) + { + bfd_error = no_memory; + return 0; + } if (bfd_seek (abfd, info->dyninfo.ld_stab, SEEK_SET) != 0 || (bfd_read ((PTR) info->dynsym, info->dynsym_count, EXTERNAL_NLIST_SIZE, abfd) @@ -277,11 +287,16 @@ MY(read_dynamic_relocs) (abfd, relocs) if (! info->valid || info->dynrel_count == 0) return 0; - if (info->dynrel == (struct external_nlist *) NULL) + if (info->dynrel == NULL) { info->dynrel = (PTR) bfd_alloc (abfd, (info->dynrel_count * obj_reloc_entry_size (abfd))); + if (!info->dynrel) + { + bfd_error = no_memory; + return (bfd_size_type) -1; + } if (bfd_seek (abfd, info->dyninfo.ld_rel, SEEK_SET) != 0 || (bfd_read ((PTR) info->dynrel, info->dynrel_count, obj_reloc_entry_size (abfd), abfd) |