From: Francis Ricci Date: Wed, 13 Sep 2017 13:57:45 +0000 (+0000) Subject: [llvm-objdump] Fix memory leaks in macho dump X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=552028fee2f5d7b843d892b82ce7b2b8cc38b7f2;p=llvm [llvm-objdump] Fix memory leaks in macho dump Summary: Detected by LeakSanitizer for Darwin Reviewers: enderby, rafael Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D37750 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313146 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index 83b21ac70ff..6d3f38333eb 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -5881,7 +5881,9 @@ static void PrintXarFilesSummary(const char *XarFilename, xar_t xar) { if(name != nullptr) outs() << name; outs() << "\n"; + xar_iter_free(xp); } + xar_iter_free(xi); } static void DumpBitcodeSection(MachOObjectFile *O, const char *sect, @@ -6044,7 +6046,7 @@ static void DumpBitcodeSection(MachOObjectFile *O, const char *sect, char *endptr; member_size = strtoul(member_size_string, &endptr, 10); if (*endptr == '\0' && member_size != 0) { - char *buffer = (char *)::operator new(member_size); + char *buffer; if (xar_extract_tobuffersz(xar, xf, &buffer, &member_size) == 0) { #if 0 // Useful for debugging. outs() << "xar member: " << member_name << " extracted\n"; @@ -6075,12 +6077,13 @@ static void DumpBitcodeSection(MachOObjectFile *O, const char *sect, XarMemberName); } XarMemberName = OldXarMemberName; + delete buffer; } - delete buffer; } } xar_iter_free(xp); } + xar_iter_free(xi); xar_close(xar); } #endif // defined(HAVE_LIBXAR)