Simplify PR23110 PE_DEBUG_DATA size checks
authorAlan Modra <amodra@gmail.com>
Tue, 16 Oct 2018 05:59:23 +0000 (16:29 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 16 Oct 2018 06:11:57 +0000 (16:41 +1030)
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.

bfd/ChangeLog
bfd/peXXigen.c

index ab665ed..9fcc6fc 100644 (file)
@@ -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.
index 1271d4e..e0b494a 100644 (file)
@@ -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++)