mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
PR17910 sym string offset check
As far as I can see the only place that sets obj_coff_strings without setting obj_coff_strings_len is pe_ILF_build_a_bfd. Fix that and we can simplify the sym string offset check. This is just a tidy. pe_ILF_build_a_bfd doesn't create bad symbols and _bfd_coff_read_string_table will always result in non-zero obj_coff_strings_len when obj_coff_strings is non-NULL. PR 17910 * coffgen.c (_bfd_coff_internal_syment_name): Always sanity check sym string offset. * peicode.h (pe_ILF_build_a_bfd): Set obj_coff_strings_len.
This commit is contained in:
@@ -443,10 +443,7 @@ _bfd_coff_internal_syment_name (bfd *abfd,
|
||||
if (strings == NULL)
|
||||
return NULL;
|
||||
}
|
||||
/* PR 17910: Only check for string overflow if the length has been set.
|
||||
Some DLLs, eg those produced by Visual Studio, may not set the length field. */
|
||||
if (obj_coff_strings_len (abfd) > 0
|
||||
&& sym->_n._n_n._n_offset >= obj_coff_strings_len (abfd))
|
||||
if (sym->_n._n_n._n_offset >= obj_coff_strings_len (abfd))
|
||||
return NULL;
|
||||
return strings + sym->_n._n_n._n_offset;
|
||||
}
|
||||
|
||||
@@ -1147,6 +1147,7 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
||||
obj_conv_table_size (abfd) = vars.sym_index;
|
||||
|
||||
obj_coff_strings (abfd) = vars.string_table;
|
||||
obj_coff_strings_len (abfd) = vars.string_ptr - vars.string_table;
|
||||
obj_coff_keep_strings (abfd) = true;
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user