diff options
author | Alan Modra <amodra@gmail.com> | 2023-03-22 09:05:10 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-03-22 09:05:10 +1030 |
commit | 317e47ee5e7c539807d6cd16bde5c274025e8ee1 (patch) | |
tree | 1ebf34e3ff4a4c5697d33c7fef6227fe0c3d32ae | |
parent | 6634b215662aa856c8df9ee0e56c0a2f7ad3684e (diff) | |
download | gdb-317e47ee5e7c539807d6cd16bde5c274025e8ee1.zip gdb-317e47ee5e7c539807d6cd16bde5c274025e8ee1.tar.gz gdb-317e47ee5e7c539807d6cd16bde5c274025e8ee1.tar.bz2 |
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.
-rw-r--r-- | bfd/coffgen.c | 5 | ||||
-rw-r--r-- | bfd/peicode.h | 1 |
2 files changed, 2 insertions, 4 deletions
diff --git a/bfd/coffgen.c b/bfd/coffgen.c index f21cf2c..774edf7 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -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; } diff --git a/bfd/peicode.h b/bfd/peicode.h index b7b4f4a..f1f3ce8 100644 --- a/bfd/peicode.h +++ b/bfd/peicode.h @@ -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; |