diff options
Diffstat (limited to 'bfd/coffgen.c')
-rw-r--r-- | bfd/coffgen.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 6d84d51..96140e0 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -1818,6 +1818,13 @@ coff_get_normalized_symtab (bfd *abfd) symbol_ptr = internal_ptr; internal_ptr->is_sym = TRUE; + /* PR 17512: Prevent buffer overrun. */ + if (symbol_ptr->u.syment.n_numaux > (raw_end - raw_src) / symesz) + { + bfd_release (abfd, internal); + return NULL; + } + for (i = 0; i < symbol_ptr->u.syment.n_numaux; i++) @@ -1825,13 +1832,6 @@ coff_get_normalized_symtab (bfd *abfd) internal_ptr++; raw_src += symesz; - /* PR 17512: Prevent buffer overrun. */ - if (raw_src >= raw_end || internal_ptr >= internal_end) - { - bfd_release (abfd, internal); - return NULL; - } - bfd_coff_swap_aux_in (abfd, (void *) raw_src, symbol_ptr->u.syment.n_type, symbol_ptr->u.syment.n_sclass, |