From 014601d56e0778b7b7a61f53923bfcbc5a92bc7f Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 24 Oct 2014 15:52:05 +0000 Subject: [PATCH] [Object] Fix MachO's getUuid to return a pointer into the object instead of a dangling ArrayRef. This works because uuid's are always little endian so it's not swapped. Fixes use-after-return reported by asan. llvm-svn: 220567 --- llvm/lib/Object/MachOObjectFile.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp index 0bd61ce..ad2fd03 100644 --- a/llvm/lib/Object/MachOObjectFile.cpp +++ b/llvm/lib/Object/MachOObjectFile.cpp @@ -2460,8 +2460,9 @@ ArrayRef MachOObjectFile::getDyldInfoExportsTrie() const { ArrayRef MachOObjectFile::getUuid() const { if (!UuidLoadCmd) return ArrayRef(); - MachO::uuid_command Uuid = getStruct(this, UuidLoadCmd); - return ArrayRef(Uuid.uuid, 16); + // Returning a pointer is fine as uuid doesn't need endian swapping. + const char *Ptr = UuidLoadCmd + offsetof(MachO::uuid_command, uuid); + return ArrayRef(reinterpret_cast(Ptr), 16); } StringRef MachOObjectFile::getStringTableData() const { -- 2.7.4