From a68aba2da76e802faf2ea887a9d8ff16d3d5959f Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 26 Aug 2020 10:11:38 +0930 Subject: [PATCH] PR26412 UBSAN: objcopy.c:3026 null pointer fwrite PR 26412 * objcopy.c (copy_object): Don't fwrite NULL contents. --- binutils/ChangeLog | 5 +++++ binutils/objcopy.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 352e5065447..bf56cc1a59f 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2020-08-26 Alan Modra + + PR 26412 + * objcopy.c (copy_object): Don't fwrite NULL contents. + 2020-08-26 Katayama Hirofumi PR 26340 diff --git a/binutils/objcopy.c b/binutils/objcopy.c index c5af179b17e..1cbcd17a7ec 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -3011,7 +3011,8 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) } bfd_size_type size = bfd_section_size (osec); - /* Note - we allow the dumping of zero-sized sections. */ + /* Note - we allow the dumping of zero-sized sections, + creating an empty file. */ f = fopen (pdump->filename, FOPEN_WB); if (f == NULL) @@ -3023,7 +3024,7 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) if (bfd_malloc_and_get_section (ibfd, osec, &contents)) { - if (fwrite (contents, 1, size, f) != size) + if (size != 0 && fwrite (contents, 1, size, f) != size) { non_fatal (_("error writing section contents to %s (error: %s)"), pdump->filename, -- 2.30.2