2010-09-03 Marcus Brinkmann * peXXigen.c (_bfd_XX_print_ce_compressed_pdata): Fix memory leak. Index: peXXigen.c =================================================================== RCS file: /cvs/src/src/bfd/peXXigen.c,v retrieving revision 1.64 diff -u -p -r1.64 peXXigen.c --- peXXigen.c 27 Jun 2010 04:07:53 -0000 1.64 +++ peXXigen.c 2 Sep 2010 23:02:08 -0000 @@ -1828,7 +1831,6 @@ _bfd_XX_print_ce_compressed_pdata (bfd * bfd_vma other_data; bfd_vma prolog_length, function_length; int flag32bit, exception_flag; - bfd_byte *tdata = 0; asection *tsection; if (i + PDATA_ROW_SIZE > stop) @@ -1860,36 +1862,29 @@ _bfd_XX_print_ce_compressed_pdata (bfd * if (tsection && coff_section_data (abfd, tsection) && pei_section_data (abfd, tsection)) { - if (bfd_malloc_and_get_section (abfd, tsection, & tdata)) - { - int xx = (begin_addr - 8) - tsection->vma; + int xx = (begin_addr - 8) - tsection->vma; + bfd_byte *tdata = 0; - tdata = (bfd_byte *) bfd_malloc (8); - if (bfd_get_section_contents (abfd, tsection, tdata, (bfd_vma) xx, 8)) + tdata = (bfd_byte *) bfd_malloc (8); + if (tdata && bfd_get_section_contents (abfd, tsection, tdata, (bfd_vma) xx, 8)) + { + bfd_vma eh, eh_data; + + eh = bfd_get_32 (abfd, tdata); + eh_data = bfd_get_32 (abfd, tdata + 4); + fprintf (file, "%08x ", (unsigned int) eh); + fprintf (file, "%08x", (unsigned int) eh_data); + if (eh != 0) { - bfd_vma eh, eh_data; - - eh = bfd_get_32 (abfd, tdata); - eh_data = bfd_get_32 (abfd, tdata + 4); - fprintf (file, "%08x ", (unsigned int) eh); - fprintf (file, "%08x", (unsigned int) eh_data); - if (eh != 0) - { - const char *s = my_symbol_for_address (abfd, eh, &cache); - - if (s) - fprintf (file, " (%s) ", s); - } + const char *s = my_symbol_for_address (abfd, eh, &sym_cache); + + if (s) + fprintf (file, " (%s) ", s); } free (tdata); } - else - { - if (tdata) - free (tdata); - } } - + fprintf (file, "\n"); }