Browse Source

Bugfixes for pe_print_debugdata()

Use a separate iteration variable for inner loop (😊).  This
generally prevented any debug directory entries after a
IMAGE_DEBUG_TYPE_CODEVIEW entry from being reported.

Don't leak the memory allocated for the section containing the debug
directory.

bfd/ChangeLog:

2020-01-16  Jon Turney  <jon.turney@dronecode.org.uk>

	* peXXigen.c (pe_print_debugdata): Fix the iteration variable for
	inner loop.  Fix a memory leak.
binutils-2_35-branch
Jon Turney 7 years ago
parent
commit
87b2920fc5
No known key found for this signature in database GPG Key ID: C7C86F0370285C81
  1. 5
      bfd/ChangeLog
  2. 8
      bfd/peXXigen.c

5
bfd/ChangeLog

@ -1,3 +1,8 @@
2020-01-16 Jon Turney <jon.turney@dronecode.org.uk>
* peXXigen.c (pe_print_debugdata): Fix the iteration variable for
inner loop. Fix a memory leak.
2020-01-30 Alan Modra <amodra@gmail.com>
* coffgen.c (coff_real_object_p): Don't clear obj_coff_keep_syms

8
bfd/peXXigen.c

@ -2630,7 +2630,7 @@ pe_print_debugdata (bfd * abfd, void * vfile)
asection *section;
bfd_byte *data = 0;
bfd_size_type dataoff;
unsigned int i;
unsigned int i, j;
bfd_vma addr = extra->DataDirectory[PE_DEBUG_DATA].VirtualAddress;
bfd_size_type size = extra->DataDirectory[PE_DEBUG_DATA].Size;
@ -2722,8 +2722,8 @@ pe_print_debugdata (bfd * abfd, void * vfile)
idd.SizeOfData, cvinfo))
continue;
for (i = 0; i < cvinfo->SignatureLength; i++)
sprintf (&signature[i*2], "%02x", cvinfo->Signature[i] & 0xff);
for (j = 0; j < cvinfo->SignatureLength; j++)
sprintf (&signature[j*2], "%02x", cvinfo->Signature[j] & 0xff);
/* xgettext:c-format */
fprintf (file, _("(format %c%c%c%c signature %s age %ld)\n"),
@ -2732,6 +2732,8 @@ pe_print_debugdata (bfd * abfd, void * vfile)
}
}
free(data);
if (size % sizeof (struct external_IMAGE_DEBUG_DIRECTORY) != 0)
fprintf (file,
_("The debug directory size is not a multiple of the debug directory entry size\n"));

Loading…
Cancel
Save