free() and implicit conversion to a function pointer (was: Use of initialized variable in strtod.c)

Joel Sherrill joel.sherrill@oarcorp.com
Thu Mar 16 15:04:00 GMT 2017



On 3/16/2017 3:39 AM, Corinna Vinschen wrote:
> On Mar 15 18:48, Jeffrey Walton wrote:
>>> But this in __call_atexit.c is definitely correct. It is
>>> treating free() as a weak symbol and the only way to
>>> silence Coverity is to add an annotation.
>>>
>>> 136      /* Don't dynamically free the atexit array if free is not
>>> 137         available.  */
>>>
>>> CID 175323 (#1 of 1): Function address comparison (BAD_COMPARE)
>>> func_conv: This implicit conversion to a function pointer is suspicious:
>>> free.
>>>         Did you intend to call free?
>>> 138      if (!free)
>>> 139        break;
>>
>> Well, I have not encountered that one (yet). Since Coverity is
>> complaining about an implicit conversion, maybe the following will
>> help to avoid the implicit part (and sidestep the finding):
>>
>>     if (free != NULL)
>>         break;
>>
>> Or perhaps:
>>
>>     if ((void*)free != NULL)
>>         break;
>>
>> If that works to clear the finding, then it is one of those items I
>> write-off as "working and playing well with the tools".
>
> Unfortunately you have to tell covreity that "free" is a var, not a function,
> but since that's not generally true... marking as false positive.
>

Looks like the second option resolves the issue. No Coverity specific
markup at all. It seems better to be explicit since comparing a function
name to NULL directly is rather unusual.

--joel



More information about the Newlib mailing list