[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
This commit is contained in:
Benjamin Kramer 2014-10-24 15:52:05 +00:00
parent aa1b35590f
commit 014601d56e
1 changed files with 3 additions and 2 deletions

View File

@ -2460,8 +2460,9 @@ ArrayRef<uint8_t> MachOObjectFile::getDyldInfoExportsTrie() const {
ArrayRef<uint8_t> MachOObjectFile::getUuid() const { ArrayRef<uint8_t> MachOObjectFile::getUuid() const {
if (!UuidLoadCmd) if (!UuidLoadCmd)
return ArrayRef<uint8_t>(); return ArrayRef<uint8_t>();
MachO::uuid_command Uuid = getStruct<MachO::uuid_command>(this, UuidLoadCmd); // Returning a pointer is fine as uuid doesn't need endian swapping.
return ArrayRef<uint8_t>(Uuid.uuid, 16); const char *Ptr = UuidLoadCmd + offsetof(MachO::uuid_command, uuid);
return ArrayRef<uint8_t>(reinterpret_cast<const uint8_t *>(Ptr), 16);
} }
StringRef MachOObjectFile::getStringTableData() const { StringRef MachOObjectFile::getStringTableData() const {