El día Tuesday, July 29, 2014 a las 08:35:51PM +0200, Philippe Waroquiers 
escribió:

> On Tue, 2014-07-29 at 08:15 +0200, Matthias Apitz wrote:
> > El día Monday, July 28, 2014 a las 07:11:02AM -0700, John Reiser escribió:
> > 
> > > > ==17454== Conditional jump or move depends on uninitialised value(s)
> > > > ==17454==    at 0x5921F10: strchrnul (in /lib/libc-2.11.3.so)
> > > > ==17454==    by 0x58E55D6: vfprintf (in /lib/libc-2.11.3.so)
> ...
> > All was fine. Why is valgrind complaining?
> 
> Here is an hypothesis:
> 
> Looking at (in the SVN version) shared/vg_replace_strmem.c
> strchrnul should have been replaced by the implementation
> in vg_replace_strmem.c.
> 
> From the stacktrace above, it looks like strchrnul was not replaced.

This (your hypothesis) matches with the fact that I was not able to
reproduce the same problem with a small C-pgm doing exactly the same
sprintf() call:

#include <stdio.h>
#define MAX_SEL_LEN 1024

static int select_record();

main()
{

    select_record("SELECT rowid, sisisinst.* from sisisinst");

}

static int select_record (char *sel_anw)
{
  char  select_anw[MAX_SEL_LEN];
  char *name = "sisisinst";

  sprintf (select_anw, sel_anw, name, name);

}

in this case the valgrind does not complain with the sprintf() ...
strchrnul() stack trace; and in addition, the output shows the
replacement of strchrnul() to some valgrind' function implementation; I
have the output here:

the big C-server (where strchrnul() is not replaced):

http://www.unixarea.de/valg1.txt

the small C-code aboce (where strchrnul() is replaced):

http://www.unixarea.de/valg2.txt

I'm not a valgrind expert and can not say what is causing the
difference; let me know if you want me to file a bug report with the data.

> Often, the glibc implementations of the str* functions
> are highly optimised, and causes false positive
> (e.g. by assuming they can read a few more bytes than
> the end of the string).
> 
> That might be the case for you.
> 
> What you could do is to redo your GDB session, but using
> the valgrind gdbserver monitor command to check the definedness
> of the printf args at various momenets and
> just before the print call.
> 
> Note that using --track-origins=yes should indicate where
> this unitialised byte is coming from.
> 
> Would be nice to understand why strchrnul was not replaced
> (using e.g. -v -v -v --trace-redir=yes).

yes, would be nice; let me know if you need more data to understand this
problem of not replacing strchrnul()

Thx

        matthias

-- 
Matthias Apitz               |  /"\   ASCII Ribbon Campaign:
E-mail: g...@unixarea.de     |  \ /   - No HTML/RTF in E-mail
WWW: http://www.unixarea.de/ |   X    - No proprietary attachments
phone: +49-170-4527211       |  / \   - Respect for open standards
                             | en.wikipedia.org/wiki/ASCII_Ribbon_Campaign

------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to