aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-10-16 16:29:23 +1030
committerAlan Modra <amodra@gmail.com>2018-10-16 16:41:57 +1030
commit48dcd4ea064ae86364dacbf4dd7f035fba56151c (patch)
tree405e2fa19f4a0fcf6cc1df6e509aac447cb99e6c /bfd
parent8df73d5cc3a87101f3bd254f33820fcce61bc971 (diff)
downloadbinutils-48dcd4ea064ae86364dacbf4dd7f035fba56151c.zip
binutils-48dcd4ea064ae86364dacbf4dd7f035fba56151c.tar.gz
binutils-48dcd4ea064ae86364dacbf4dd7f035fba56151c.tar.bz2
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.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/peXXigen.c14
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++)