Nonsense error messages on invalid aout string offset

translate_symbol_table returns false on detecting an out of range name
string offset, hooray for error checking, but doesn't set bfd_error or
print a useful error.  bfd_error therefore contains whatever it had
previously, in my testing, bfd_error_system_call.  So the error
printed depended on errno.

	PR 22887
	* aoutx.h (translate_symbol_table): Print an error message and set
	bfd_error on finding an invalid name string offset.
This commit is contained in:
Alan Modra 2018-02-28 17:14:24 +10:30
parent f169cfdc08
commit 0d329c0a83
2 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2018-02-28 Alan Modra <amodra@gmail.com>
PR 22887
* aoutx.h (translate_symbol_table): Print an error message and set
bfd_error on finding an invalid name string offset.
2018-02-27 H.J. Lu <hongjiu.lu@intel.com>
* config.in: Regenerated.

View File

@ -1734,7 +1734,13 @@ NAME (aout, translate_symbol_table) (bfd *abfd,
else if (x < strsize)
in->symbol.name = str + x;
else
return FALSE;
{
_bfd_error_handler
(_("%pB: invalid string offset %" PRIu64 " >= %" PRIu64),
abfd, (uint64_t) x, (uint64_t) strsize);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
in->symbol.value = GET_SWORD (abfd, ext->e_value);
in->desc = H_GET_16 (abfd, ext->e_desc);