Bugfixes for pe_print_debugdata()
authorJon Turney <jon.turney@dronecode.org.uk>
Wed, 15 Jan 2020 18:48:13 +0000 (18:48 +0000)
committerJon Turney <jon.turney@dronecode.org.uk>
Thu, 30 Jan 2020 13:06:24 +0000 (13:06 +0000)
Use a separate iteration variable for inner loop (:blush:).  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.

bfd/ChangeLog
bfd/peXXigen.c

index 1e2740eacc8ed85b7aa7c6350f76da2857e820fe..58af683172418de88e6b827cce4fe1496042a075 100644 (file)
@@ -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
index c5082a7deeb0ac072d0ecf330a77aca1b3e12168..ac0cf174647434eb184bf05e22634742b0869416 100644 (file)
@@ -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"));