MachObjectFile: Don't leak on error.

llvm-svn: 187698
This commit is contained in:
Benjamin Kramer 2013-08-03 22:16:37 +00:00
parent 9ce7708abb
commit 097e09abba
1 changed files with 9 additions and 7 deletions

View File

@ -1599,21 +1599,23 @@ void MachOObjectFile::ReadULEB128s(uint64_t Index,
ObjectFile *ObjectFile::createMachOObjectFile(MemoryBuffer *Buffer) { ObjectFile *ObjectFile::createMachOObjectFile(MemoryBuffer *Buffer) {
StringRef Magic = Buffer->getBuffer().slice(0, 4); StringRef Magic = Buffer->getBuffer().slice(0, 4);
error_code ec; error_code ec;
ObjectFile *Ret; OwningPtr<ObjectFile> Ret;
if (Magic == "\xFE\xED\xFA\xCE") if (Magic == "\xFE\xED\xFA\xCE")
Ret = new MachOObjectFile(Buffer, false, false, ec); Ret.reset(new MachOObjectFile(Buffer, false, false, ec));
else if (Magic == "\xCE\xFA\xED\xFE") else if (Magic == "\xCE\xFA\xED\xFE")
Ret = new MachOObjectFile(Buffer, true, false, ec); Ret.reset(new MachOObjectFile(Buffer, true, false, ec));
else if (Magic == "\xFE\xED\xFA\xCF") else if (Magic == "\xFE\xED\xFA\xCF")
Ret = new MachOObjectFile(Buffer, false, true, ec); Ret.reset(new MachOObjectFile(Buffer, false, true, ec));
else if (Magic == "\xCF\xFA\xED\xFE") else if (Magic == "\xCF\xFA\xED\xFE")
Ret = new MachOObjectFile(Buffer, true, true, ec); Ret.reset(new MachOObjectFile(Buffer, true, true, ec));
else else {
delete Buffer;
return NULL; return NULL;
}
if (ec) if (ec)
return NULL; return NULL;
return Ret; return Ret.take();
} }
} // end namespace object } // end namespace object