diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-06-18 17:07:15 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-06-18 17:07:15 +0000 |
commit | a841620f66f2e5673a0a0529f655dcb742031e6b (patch) | |
tree | dd64ffbe0c5304694389fb92fd22107dae30b35c /lib/Object | |
parent | debd8312233176171abdd6426ea49cb73ae7b1fd (diff) | |
download | llvm-a841620f66f2e5673a0a0529f655dcb742031e6b.tar.gz llvm-a841620f66f2e5673a0a0529f655dcb742031e6b.tar.bz2 llvm-a841620f66f2e5673a0a0529f655dcb742031e6b.tar.xz |
Fix a memory leak in the error path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211184 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Object')
-rw-r--r-- | lib/Object/ELFObjectFile.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/Object/ELFObjectFile.cpp b/lib/Object/ELFObjectFile.cpp index 356288ffc5..0a3e2cb790 100644 --- a/lib/Object/ELFObjectFile.cpp +++ b/lib/Object/ELFObjectFile.cpp @@ -17,8 +17,8 @@ namespace llvm { using namespace object; -ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj, - bool BufferOwned) { +static ErrorOr<ObjectFile *> createELFObjectFileAux(MemoryBuffer *Obj, + bool BufferOwned) { std::pair<unsigned char, unsigned char> Ident = getElfArchType(Obj); std::size_t MaxAlignment = 1ULL << countTrailingZeros(uintptr_t(Obj->getBufferStart())); @@ -82,4 +82,12 @@ ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj, return R.release(); } +ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj, + bool BufferOwned) { + ErrorOr<ObjectFile *> Ret = createELFObjectFileAux(Obj, BufferOwned); + if (BufferOwned && Ret.getError()) + delete Obj; + return Ret; +} + } // end namespace llvm |