X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fcoffgen.c;h=96140e0ad278d9f7559eaa3e4432bbace5c92231;hb=af2d5cd8e9f81832b04af6cd0e51def4065bbf71;hp=6d84d512844411ac1ee7d46e00885aa92ee2bd9b;hpb=cb001c0d283dd884efe06770d033a50fb1bc6c7d;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 6d84d51284..96140e0ad2 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,