[binutils-gdb] PR17910 sym string offset check
Alan Modra
amodra@sourceware.org
Tue Mar 21 22:48:45 GMT 2023
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=317e47ee5e7c539807d6cd16bde5c274025e8ee1
commit 317e47ee5e7c539807d6cd16bde5c274025e8ee1
Author: Alan Modra <amodra@gmail.com>
Date: Wed Mar 22 09:05:10 2023 +1030
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.
Diff:
---
bfd/coffgen.c | 5 +----
bfd/peicode.h | 1 +
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index f21cf2ca523..774edf76f24 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 b7b4f4abbb9..f1f3ce81533 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;
More information about the Binutils-cvs
mailing list