Use of initialized variable in strtod.c
Joel Sherrill
joel.sherrill@oarcorp.com
Wed Mar 15 18:38:00 GMT 2017
On 3/15/2017 1:34 PM, Craig Howland wrote:
> On 03/15/2017 02:16 PM, Joel Sherrill wrote:
>> Hi
>>
>> I have looked at this one enough to believe it is
>> a real issue but have no idea what the proper
>> solution is. Maybe someone is more familiar with
>> this routine can help.
>>
>> This looks like it was introduced in 2006 by Jeff
>> Johnston but I don't expect him to remember it. :)
>>
>> https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=commit;f=newlib/libc/stdlib/strtod.c;h=f489b5943c8f8655b0a3caddd38114111576ab35
>>
>>
>> 2006-06-22 Jeff Johnston <jjohnstn@redhat.com>
>>
>> * libc/stdlib/Makefile.am: Add new gdtoa routines.
>> * libc/stdlib/Makefile.in: Regenerated.
>> * libc/stdlib/gd_qnan.h: New file.
>> * libc/stdlib/gdtoa-gethex.c: Ditto.
>> * libc/stdlib/gdtoa-hexnan.c: Ditto.
>> * libc/stdlib/gdtoa.h: Ditto.
>> * libc/stdlib/mprec.c: Add new helper routines needed by
>> the new gdtoa code.
>> * libc/stdlib/mprec.h: Integrate some defines and prototypes
>> used by gdtoa routines here.
>> * libc/stdlib/strtod.c: Rebased on David M. Gay's gdtoa-strtod.c
>> which adds C99 support such as nan, inf, and hexadecimal input
>> format.
>>
>> Basically if (bb) is false, then bits is not set
>> and it is used as input to ULtod.
>>
>> 334 if (bb) {
>> 335 copybits(bits, fpi.nbits, bb);
>> 336 Bfree(ptr,bb);
>> 337 }
>>
>> CID 175379 (#1 of 1): Uninitialized scalar variable (UNINIT)
>> 10. uninit_use_in_call: Using uninitialized element of array bits when calling
>> ULtod. [show details]
>> 338 ULtod(rv.i, bits, exp, i);
>>
>> Hopefully someone has some insight on how to fix this.
>>
>> Thanks.
>>
> I took a quick look, and I think (it's been ages since I had to do some editing
> in strtod.c) it is OK. Specifically, it does appear that bb is only ever
> returned as 0 in a case when ULtod does not need the value of bits. So while
> Coverity it right that it could be a problem, it is not really.
Would it be better to initialize bb to 0? Or assign it on
the else to "if (bb)". If that's correct, it would make
the intent clearer and eliminate the use of an uninitialized
variable.
FWIW I am a firm believer in not marking issues as false
positive. In this case, there really is a use of an
uninitialized variable. So we might as well address that.
--joel
> Craig
>
More information about the Newlib
mailing list