From 7fbd5f4e2c143bbe28715608ca00e2e93a7d7fd4 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 17 Dec 2020 23:21:11 +1030 Subject: Remove some static buffers Fixes possible overflow of a static buffer for powerpc with translated messages, and on v850 when symbol names are large. * archive.c (_bfd_ar_spacepad, _bfd_ar_sizepad): Use auto buf. * coff-mcore.c (coff_mcore_relocate_section): Likewise. * elf32-ppc.c (ppc_elf_unhandled_reloc): Use asprintf in place of fixed size and possibly too small buf for translated message. * elf64-ppc.c (ppc64_elf_unhandled_reloc): Likewise. * elf32-v850.c (v850_elf_check_relocs): Likewise. * ecoff.c (ecoff_type_to_string): Pass in return string buff rather than using static buffer2. Delete dead code. Remove unnecessary parentheses. (_bfd_ecoff_print_symbol): Pass auto buff to ecoff_type_to_string. * elf32-rx.c (describe_flags): Pass in return string buf rather than using static buf. (rx_elf_merge_private_bfd_data): Pass buf to describe_flags. (rx_elf_print_private_bfd_data): Likewise. * mach-o.c (cpusubtype): Pass in return string buffer rather than using static buffer. (bfd_mach_o_bfd_print_private_bfd_data): Pass buff to cpusubtype. * opncls.c (separate_debug_file_exists): Make buffer an auto var. (bfd_fill_in_gnu_debuglink_section): Likewise. * peXXigen.c (rsrc_resource_name): Pass in return string buffer rather than using static buffer. (rsrc_sort_entries): Pass buff to rsrc_resource_name. * vms-alpha.c (_bfd_vms_write_emh): Pass tbuf to get_vms_time_string. * vms-misc.c (get_vms_time_string): Pass in return string tbuf rather than using static tbuf. * vms.h (get_vms_time_string): Update prototype. --- bfd/peXXigen.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'bfd/peXXigen.c') diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index 646ad0f..b5ccb18 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -3681,9 +3681,8 @@ rsrc_print_name (char * buffer, rsrc_string string) } static const char * -rsrc_resource_name (rsrc_entry * entry, rsrc_directory * dir) +rsrc_resource_name (rsrc_entry *entry, rsrc_directory *dir, char *buffer) { - static char buffer [256]; bfd_boolean is_string = FALSE; buffer[0] = 0; @@ -4015,8 +4014,12 @@ rsrc_sort_entries (rsrc_dir_chain * chain, || dir->entry->parent->entry == NULL) _bfd_error_handler (_(".rsrc merge failure: duplicate leaf")); else - _bfd_error_handler (_(".rsrc merge failure: duplicate leaf: %s"), - rsrc_resource_name (entry, dir)); + { + char buff[256]; + + _bfd_error_handler (_(".rsrc merge failure: duplicate leaf: %s"), + rsrc_resource_name (entry, dir, buff)); + } bfd_set_error (bfd_error_file_truncated); return; } -- cgit v1.1