Assertion fail at peicode.h:607
Martin Storsjö
martin@martin.st
Wed Oct 16 13:10:08 GMT 2024
On Wed, 16 Oct 2024, Alan Modra wrote:
> 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.
>
> 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)
Indeed, this is right - only the case in SIZEOF_IDATA6 should use
import_name, while this still should use symbol_name.
Sorry about this, and thanks for fixing it!
// Martin
More information about the Binutils
mailing list