From 24d8b848385e3dbfda4c8d629f40b0a7ea335dc0 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 18 Jun 2014 17:07:15 +0000 Subject: [PATCH] Fix a memory leak in the error path. llvm-svn: 211184 --- llvm/lib/Object/ELFObjectFile.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp index 356288f..0a3e2cb 100644 --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -17,8 +17,8 @@ namespace llvm { using namespace object; -ErrorOr ObjectFile::createELFObjectFile(MemoryBuffer *Obj, - bool BufferOwned) { +static ErrorOr createELFObjectFileAux(MemoryBuffer *Obj, + bool BufferOwned) { std::pair Ident = getElfArchType(Obj); std::size_t MaxAlignment = 1ULL << countTrailingZeros(uintptr_t(Obj->getBufferStart())); @@ -82,4 +82,12 @@ ErrorOr ObjectFile::createELFObjectFile(MemoryBuffer *Obj, return R.release(); } +ErrorOr ObjectFile::createELFObjectFile(MemoryBuffer *Obj, + bool BufferOwned) { + ErrorOr Ret = createELFObjectFileAux(Obj, BufferOwned); + if (BufferOwned && Ret.getError()) + delete Obj; + return Ret; +} + } // end namespace llvm -- 2.7.4