On 03.10.2012, at 23:19, Jordan Rose <[email protected]> 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 <[email protected]> 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
>> [email protected]
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to