[llvm] r220567 - [Object] Fix MachO's getUuid to return a pointer into the object instead of a dangling ArrayRef.
Benjamin Kramer
benny.kra at googlemail.com
Fri Oct 24 08:52:05 PDT 2014
Author: d0k
Date: Fri Oct 24 10:52:05 2014
New Revision: 220567
URL: http://llvm.org/viewvc/llvm-project?rev=220567&view=rev
Log:
[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.
Modified:
llvm/trunk/lib/Object/MachOObjectFile.cpp
Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=220567&r1=220566&r2=220567&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Fri Oct 24 10:52:05 2014
@@ -2460,8 +2460,9 @@ ArrayRef<uint8_t> MachOObjectFile::getDy
ArrayRef<uint8_t> MachOObjectFile::getUuid() const {
if (!UuidLoadCmd)
return ArrayRef<uint8_t>();
- MachO::uuid_command Uuid = getStruct<MachO::uuid_command>(this, UuidLoadCmd);
- return ArrayRef<uint8_t>(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<uint8_t>(reinterpret_cast<const uint8_t *>(Ptr), 16);
}
StringRef MachOObjectFile::getStringTableData() const {
More information about the llvm-commits
mailing list