From: Alan Modra Date: Mon, 6 Jul 2026 01:56:24 +0000 (+0930) Subject: PR 34353 objcopy: null-pointer dereference bfd/section.c:1433 X-Git-Tag: binutils-2_47~65 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=64ca9aa24218cee8b31c4dc47694369da67b1acd;p=thirdparty%2Fbinutils-gdb.git PR 34353 objcopy: null-pointer dereference bfd/section.c:1433 objcopy --update-section specifying a SHT_GROUP section hits a case where output_section is NULL. * objcopy.c (copy_object): Don't segfault when update_sections output_section is NULL. Remove the "not found" part of existing error so this message can be used. * testsuite/binutils-all/update-section.exp: Update to suit. --- diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 89eb3f72dcd..4ab7e8997b5 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -3072,13 +3072,13 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) pupdate = pupdate->next) { pupdate->section = bfd_get_section_by_name (ibfd, pupdate->name); - if (pupdate->section == NULL) + if (pupdate->section == NULL + || (osec = pupdate->section->output_section) == NULL) { - non_fatal (_("error: %s not found, can't be updated"), pupdate->name); + non_fatal (_("error: %s can't be updated"), pupdate->name); return false; } - osec = pupdate->section->output_section; if (!bfd_set_section_size (osec, pupdate->size)) { bfd_nonfatal_message (NULL, obfd, osec, NULL); diff --git a/binutils/testsuite/binutils-all/update-section.exp b/binutils/testsuite/binutils-all/update-section.exp index 273e1154ec9..3fd679b3cc7 100644 --- a/binutils/testsuite/binutils-all/update-section.exp +++ b/binutils/testsuite/binutils-all/update-section.exp @@ -111,7 +111,7 @@ do_compare update-1.o update-4.o # Check that --update-section on an unknown section will fail. if { ![do_objcopy update-2.o \ "--update-section .bar=tmpdir/dumped-contents" \ - "error: .bar not found, can't be updated"] } then { + "error: .bar can't be updated"] } then { return }