==3232== Syscall param stat64(file_name) points to uninitialised byte(s)
file_name is the first (leftmost) parameter.
==3232== at 0x49FD6B8: _xstat (xstat.c:48) ==3232== by 0x41F23: stat (stat.c:51) ==3232== by 0x1EC93: getList (util.c:1379)
> Looking at line 1379 from util.c: > if (!stat(listfile, &statbuf))
==3232== by 0x18E0F: _get_var (ngr.c:3868) ==3232== by 0x19F33: get_var (ngr.c:4049) ==3232== by 0xBB4F: main (daemon.c:346) ==3232== Address 0x7d87ba8c is on thread 1's stack ==3232== in frame #2, created by getList (util.c:1300) ==3232== Uninitialised value was created by a stack allocation ==3232== at 0x1E55C: getList (util.c:1300)
listfile does exist.
What is the declaration of listfile? Is it an array, a pointer, ...? It would be helpful to print its value: fprintf(stderr, "\nlistfile='%s'\n", listfile); just before the stat() call.
statbuf however, is simply defined as: struct stat statbuf; It's not initialized by memset or something, is that what valgrind complains about?
No; the first line of the complaint indicates that the complaint is about the file_name, the first parameter, which is read by stat(). The documentation (run the shell command "man 2 stat") explains that the second argument is output-only. The operating system kernel writes to [nearly] all the statbuf, and reads none of it. If the original presentation captures all the important information, then it will be easy to construct a small stand-alone test case that triggers the complaint in question. Please try that. _______________________________________________ Valgrind-users mailing list Valgrind-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/valgrind-users