aboutsummaryrefslogtreecommitdiff
path: root/bfd/archive.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-06-14 11:04:22 +0000
committerJakub Jelinek <jakub@redhat.com>2005-06-14 11:04:22 +0000
commit933d961a3c097d7cb4864314df714abacc9b234e (patch)
tree3bf6884f1ce34075ad32569a4ee5f0d8b755f674 /bfd/archive.c
parent58b9a773e18e18e7ff086f6f6ff36837d0cc9537 (diff)
downloadgdb-933d961a3c097d7cb4864314df714abacc9b234e.zip
gdb-933d961a3c097d7cb4864314df714abacc9b234e.tar.gz
gdb-933d961a3c097d7cb4864314df714abacc9b234e.tar.bz2
* elf.c (bfd_section_from_shdr): Fail if name is NULL.
Prevent endless recursion on broken objects. * archive.c (do_slurp_coff_armap): Check for overflows.
Diffstat (limited to 'bfd/archive.c')
-rw-r--r--bfd/archive.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/bfd/archive.c b/bfd/archive.c
index 7dfe6b6..ce6a332 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -821,9 +821,15 @@ do_slurp_coff_armap (bfd *abfd)
/* The coff armap must be read sequentially. So we construct a
bsd-style one in core all at once, for simplicity. */
+ if (nsymz > ~ (bfd_size_type) 0 / sizeof (carsym))
+ return FALSE;
+
carsym_size = (nsymz * sizeof (carsym));
ptrsize = (4 * nsymz);
+ if (carsym_size + stringsize + 1 <= carsym_size)
+ return FALSE;
+
ardata->symdefs = bfd_zalloc (abfd, carsym_size + stringsize + 1);
if (ardata->symdefs == NULL)
return FALSE;