[cfe-commits] r165157 - /cfe/trunk/lib/Driver/OptTable.cpp

Benjamin Kramer benny.kra at gmail.com
Thu Oct 4 03:10:10 PDT 2012


On 03.10.2012, at 23:19, Jordan Rose <jordan_rose at apple.com> wrote:

> Why not just use StringRef::startswith? That also does the length check first, which is more efficient than looking for the end of both strings at every character.

r165217. I doubt that this is measurably more efficient, we're trading 1x strncmp and 1x strlen for 2x strlen (one outside of the loop) and 1x memcmp here, but startswith looks nicer than the strncmp call.

- Ben
> 
> 
> On Oct 3, 2012, at 13:58 , Benjamin Kramer <benny.kra at googlemail.com> wrote:
> 
>> Author: d0k
>> Date: Wed Oct  3 15:58:09 2012
>> New Revision: 165157
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=165157&view=rev
>> Log:
>> Fix invalid reads by memcmp.
>> 
>> Str may be smaller than Start->Name here. Use strncmp to avoid scanning past the
>> end. Found by valgrind.
>> 
>> Modified:
>>   cfe/trunk/lib/Driver/OptTable.cpp
>> 
>> Modified: cfe/trunk/lib/Driver/OptTable.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/OptTable.cpp?rev=165157&r1=165156&r2=165157&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/OptTable.cpp (original)
>> +++ cfe/trunk/lib/Driver/OptTable.cpp Wed Oct  3 15:58:09 2012
>> @@ -162,7 +162,7 @@
>>  for (; Start != End; ++Start) {
>>    // Scan for first option which is a proper prefix.
>>    for (; Start != End; ++Start)
>> -      if (memcmp(Str, Start->Name, strlen(Start->Name)) == 0)
>> +      if (strncmp(Str, Start->Name, strlen(Start->Name)) == 0)
>>        break;
>>    if (Start == End)
>>      break;
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 





More information about the cfe-commits mailing list