[binutils-gdb] PR26418 UBSAN: cache.c:386 null pointer fwrite

Alan Modra amodra@sourceware.org
Wed Aug 26 13:54:30 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9863cbb7bd3495107a5b1b4d887c95d859c9a35e

commit 9863cbb7bd3495107a5b1b4d887c95d859c9a35e
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Aug 26 14:18:53 2020 +0930

    PR26418 UBSAN: cache.c:386 null pointer fwrite
    
            PR 26418
            * ecofflink.c (WRITE): Don't write size 0 chunks.

Diff:
---
 bfd/ChangeLog   |  5 +++++
 bfd/ecofflink.c | 10 ++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c296f6d89a3..2fd2321a429 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26418
+	* ecofflink.c (WRITE): Don't write size 0 chunks.
+
 2020-08-26  Alan Modra  <amodra@gmail.com>
 
 	* bfdio.c (bfd_get_file_size): Don't segv on NULL adata.
diff --git a/bfd/ecofflink.c b/bfd/ecofflink.c
index e7b35f670db..7c9a7aeaa05 100644
--- a/bfd/ecofflink.c
+++ b/bfd/ecofflink.c
@@ -1489,10 +1489,12 @@ bfd_ecoff_write_debug (bfd *abfd,
     return FALSE;
 
 #define WRITE(ptr, count, size, offset) \
-  BFD_ASSERT (symhdr->offset == 0 \
-	      || (bfd_vma) bfd_tell (abfd) == symhdr->offset); \
-  if (bfd_bwrite (debug->ptr, (bfd_size_type) size * symhdr->count, abfd)\
-      != size * symhdr->count) \
+  BFD_ASSERT (symhdr->offset == 0				\
+	      || (bfd_vma) bfd_tell (abfd) == symhdr->offset);	\
+  if (size != 0							\
+      && bfd_bwrite (debug->ptr,				\
+		     (bfd_size_type) size * symhdr->count,	\
+		     abfd) != size * symhdr->count)		\
     return FALSE;
 
   WRITE (line, cbLine, sizeof (unsigned char), cbLineOffset);


More information about the Binutils-cvs mailing list