From 02d1e73bf63bb6d4e7c8b1eb35964cd2e00228d5 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 16 Oct 2024 08:30:07 +1030 Subject: [PATCH] Assertion fail at peicode.h:607 This is the assertion that vars->string_ptr < vars->end_string_ptr, ie. when it fails we've overflowed the string buffer area. Caused by allocating space for import_name but writing symbol_name, and they can be different. * peicode.h (SIZEOF_ILF_STRINGS): Revert 042f14505e change. --- bfd/peicode.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bfd/peicode.h b/bfd/peicode.h index eb5d6da6169..1a084fda05b 100644 --- a/bfd/peicode.h +++ b/bfd/peicode.h @@ -410,7 +410,7 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd) There will be two symbols for the imported value, one the symbol name and one with _imp__ prefixed. Allowing for the terminating nul's this - is strlen (import_name) * 2 + 8 + 21 + strlen (source_dll). + is strlen (symbol_name) * 2 + 8 + 21 + strlen (source_dll). The strings in the string table must start STRING__SIZE_SIZE bytes into the table in order to for the string lookup code in coffgen/coffcode to @@ -426,7 +426,7 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd) #define SIZEOF_ILF_EXT_SYMS (NUM_ILF_SYMS * sizeof (*vars.esym_table)) #define SIZEOF_ILF_RELOCS (NUM_ILF_RELOCS * sizeof (*vars.reltab)) #define SIZEOF_ILF_INT_RELOCS (NUM_ILF_RELOCS * sizeof (*vars.int_reltab)) -#define SIZEOF_ILF_STRINGS (strlen (import_name) * 2 + 8 \ +#define SIZEOF_ILF_STRINGS (strlen (symbol_name) * 2 + 8 \ + 21 + strlen (source_dll) \ + NUM_ILF_SECTIONS * 9 \ + STRING_SIZE_SIZE)