diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-24 14:00:26 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-24 14:00:26 +0000 |
commit | 4d76a21bc71fbba5e868036dd0d07f0b991d96a4 (patch) | |
tree | 3c12f49b3a07fe28f1b4e11288c504e473d643f0 | |
parent | 78bfe2b12ee1d0665a39c2ada1fad367fad8faed (diff) | |
download | bcm5719-llvm-4d76a21bc71fbba5e868036dd0d07f0b991d96a4.tar.gz bcm5719-llvm-4d76a21bc71fbba5e868036dd0d07f0b991d96a4.zip |
Delete the buffer in createObjectFile if it fails.
The Binary constructor takes ownership of the memory buffer. This is a fairly
unfortunate interface, but for now make createObjectFile consistent with it
by also deleting the buffer if it fails.
Fixes a leak in llvm-ar found by the valgrind bots.
llvm-svn: 187039
-rw-r--r-- | llvm/lib/Object/ObjectFile.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Object/ObjectFile.cpp b/llvm/lib/Object/ObjectFile.cpp index 8dfc26508bc..1d1dafdc8f4 100644 --- a/llvm/lib/Object/ObjectFile.cpp +++ b/llvm/lib/Object/ObjectFile.cpp @@ -38,8 +38,10 @@ section_iterator ObjectFile::getRelocatedSection(DataRefImpl Sec) const { } ObjectFile *ObjectFile::createObjectFile(MemoryBuffer *Object) { - if (!Object || Object->getBufferSize() < 64) + if (Object->getBufferSize() < 64) { + delete Object; return 0; + } sys::fs::file_magic Type = sys::fs::identify_magic(Object->getBuffer()); switch (Type) { @@ -47,6 +49,7 @@ ObjectFile *ObjectFile::createObjectFile(MemoryBuffer *Object) { case sys::fs::file_magic::bitcode: case sys::fs::file_magic::archive: case sys::fs::file_magic::macho_universal_binary: + delete Object; return 0; case sys::fs::file_magic::elf_relocatable: case sys::fs::file_magic::elf_executable: |