projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ensure that when attempting to process an ARM Mach-O file with unknown relocs, that...
[deliverable/binutils-gdb.git]
/
bfd
/
mach-o.c
diff --git
a/bfd/mach-o.c
b/bfd/mach-o.c
index d9edef2871d83b53280b613935c068e4327f3270..4e6408670dd7c1dfe2f2f59671934324bd79cd26 100644
(file)
--- a/
bfd/mach-o.c
+++ b/
bfd/mach-o.c
@@
-1501,7
+1501,11
@@
bfd_mach_o_canonicalize_non_scattered_reloc (bfd *abfd,
{
/* PR 17512: file: 006-2964-0.004. */
if (num > mdata->nsects)
{
/* PR 17512: file: 006-2964-0.004. */
if (num > mdata->nsects)
- return FALSE;
+ {
+ _bfd_error_handler (_("\
+malformed mach-o reloc: section index is greater than the number of sections"));
+ return FALSE;
+ }
/* A section number. */
sym = mdata->sections[num - 1]->bfdsection->symbol_ptr_ptr;
/* A section number. */
sym = mdata->sections[num - 1]->bfdsection->symbol_ptr_ptr;
@@
-1609,7
+1613,7
@@
bfd_mach_o_canonicalize_relocs (bfd *abfd, unsigned long filepos,
{
bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd);
unsigned long i;
{
bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd);
unsigned long i;
- struct mach_o_reloc_info_external *native_relocs;
+ struct mach_o_reloc_info_external *native_relocs
= NULL
;
bfd_size_type native_size;
/* Allocate and read relocs. */
bfd_size_type native_size;
/* Allocate and read relocs. */
@@
-1617,7
+1621,7
@@
bfd_mach_o_canonicalize_relocs (bfd *abfd, unsigned long filepos,
/* PR 17512: file: 09477b57. */
if (native_size < count)
/* PR 17512: file: 09477b57. */
if (native_size < count)
-
return -1
;
+
goto err
;
native_relocs =
(struct mach_o_reloc_info_external *) bfd_malloc (native_size);
native_relocs =
(struct mach_o_reloc_info_external *) bfd_malloc (native_size);
@@
-1636,8
+1640,11
@@
bfd_mach_o_canonicalize_relocs (bfd *abfd, unsigned long filepos,
}
free (native_relocs);
return i;
}
free (native_relocs);
return i;
+
err:
free (native_relocs);
err:
free (native_relocs);
+ if (bfd_get_error () == bfd_error_no_error)
+ bfd_set_error (bfd_error_invalid_operation);
return -1;
}
return -1;
}
This page took
0.024585 seconds
and
4
git commands to generate.