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