Peter Olson <pe...@peabo.com> writes:
>> On October 14, 2015 at 3:20 PM Edward Bartolo <edb...@gmail.com> wrote:
>> 
>> 
>> This is another part of the backend code where valgrind is saying:
>> 
>> ==5501== 5 errors in context 1 of 3:
>> ==5501== Use of uninitialised value of size 8
>> ==5501==    at 0x5172AFC: ____strtod_l_internal (strtod_l.c:889)
>> ==5501==    by 0x403856: getRadiatingWifiList (automated_scanner.c:265)

[...]

> This diagnostic bothers me:
>
>> ==5501==  Uninitialised value was created by a stack allocation
>> ==5501==    at 0x4034BB: getRadiatingWifiList (automated_scanner.c:155)
>
> This is hundreds of lines away from
>
>> ==5501==    by 0x403856: getRadiatingWifiList
>> (automated_scanner.c:265)

"ELARGEFUNCTION"

> which is presumably
>
>>                              tmp_wifi_quality->quality = strtod(tmpstr, 
>> NULL);
>
> You should probably investigate the area around line 155.

Since the explanation may be useful: 'Stack allocations' usually happen
at the beginning of a function, regardless of the point of a variable
declaration. Eg, when running the following test/ example program:

------
/* 1 */ #include <stdlib.h>
/* 2 */ #include <string.h>
/* 3 */ #include <stdio.h>
/* 4 */ 
/* 5 */ char const scan_buffer[] = "yadda Signal level=5.9 fff";
/* 6 */ 
/* 7 */ int main(void)
/* 8 */ {
/* 9 */     double d;
/* 10 */            
/* 11 */            char* substr = strstr((char *) scan_buffer, "Signal 
level=");
/* 12 */            substr = strstr(substr, "=");
/* 13 */            char* endstr = strstr(substr + 1, " ");
/* 14 */            char tmpstr[8];
/* 15 */            strncpy(tmpstr, substr + 1, endstr - substr - 1);
/* 16 */            tmpstr[endstr - substr + 1] = '\0';
/* 17 */
/* 18 */            d = strtod(tmpstr, NULL);
/* 19 */            printf("%f\n", d);
/* 20 */
/* 21 */            return 0;
/* 22 */        }
------

via

$valgrind --track-origins=yes ./a.out

one gets the following (partial) output:

==27072== Conditional jump or move depends on uninitialised value(s)
==27072==    at 0x4E63430: ____strtod_l_internal (strtod_l.c:803)
==27072==    by 0x40066B: main (aa.c:18)
==27072==  Uninitialised value was created by a stack allocation
==27072==    at 0x4005D4: main (aa.c:8)
==27072== 
==27072== Use of uninitialised value of size 8
==27072==    at 0x4E6343E: ____strtod_l_internal (strtod_l.c:818)
==27072==    by 0x40066B: main (aa.c:18)
==27072==  Uninitialised value was created by a stack allocation
==27072==    at 0x4005D4: main (aa.c:8)

The uninitialized values is used on line 18 but reported as allocated on
line 8 which is the start of the function.
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to