[binutils-gdb] Simplify PR23110 PE_DEBUG_DATA size checks

Alan Modra amodra@sourceware.org
Tue Oct 16 06:19:00 GMT 2018


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

commit 48dcd4ea064ae86364dacbf4dd7f035fba56151c
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Oct 16 16:29:23 2018 +1030

    Simplify PR23110 PE_DEBUG_DATA size checks
    
    The negative size check can be rolled into the "exceeds space left in
    section" check if that is done using an unsigned comparison.  We know
    that "addr - section->vma" is never larger than section->size since
    the section is found by find_section_by_vma.
    
    	* peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Simplify
    	PE_DEBUG_DATA size checks.

Diff:
---
 bfd/ChangeLog  |  5 +++++
 bfd/peXXigen.c | 14 ++------------
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ab665ed..9fcc6fc 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,10 @@
 2018-10-16  Alan Modra  <amodra@gmail.com>
 
+	* peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Simplify
+	PE_DEBUG_DATA size checks.
+
+2018-10-16  Alan Modra  <amodra@gmail.com>
+
 	PR 23781
 	* peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Free data
 	before returning.
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index 1271d4e..e0b494a 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -2984,8 +2984,8 @@ _bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd)
 	    (struct external_IMAGE_DEBUG_DIRECTORY *)(data + (addr - section->vma));
 
 	  /* PR 17512: file: 0f15796a.  */
-	  if (ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size + (addr - section->vma)
-	      > bfd_get_section_size (section))
+	  if ((unsigned long) ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
+	      > section->size - (addr - section->vma))
 	    {
 	      /* xgettext:c-format */
 	      _bfd_error_handler
@@ -2996,16 +2996,6 @@ _bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd)
 	      free (data);
 	      return FALSE;
 	    }
-	  /* PR 23110.  */
-	  else if (ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size < 0)
-	    {
-	      /* xgettext:c-format */
-	      _bfd_error_handler
-		(_("%pB: Data Directory size (%#lx) is negative"),
-		 obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size);
-	      free (data);
-	      return FALSE;
-	    }
 
 	  for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
 		 / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)



More information about the Binutils-cvs mailing list