[llvm] r220567 - [Object] Fix MachO's getUuid to return a pointer into the object instead of a dangling ArrayRef.

Alexander Potapenko glider at google.com
Fri Oct 24 11:36:55 PDT 2014


Thanks a lot, Benjamin!
Sorry that you beat me to it.

On Fri, Oct 24, 2014 at 11:07 AM, Alexey Samsonov <vonosmas at gmail.com> wrote:
> Thanks for fixing this!
>
> On Fri, Oct 24, 2014 at 8:52 AM, Benjamin Kramer <benny.kra at googlemail.com>
> wrote:
>>
>> 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 {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
>
> --
> Alexey Samsonov
> vonosmas at gmail.com
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Alexander Potapenko
Software Engineer
Google Moscow



More information about the llvm-commits mailing list