Hi Jeffrey,

On Thu, May 02, 2019 at 12:46:30PM -0400, Jeffrey Walton wrote:
> On Thu, May 2, 2019 at 12:02 PM Mark Wielaard <m...@klomp.org> wrote:
> >
> > On Tue, 2019-04-30 at 20:43 -0400, Jeffrey Walton wrote:
> > > It looks like GCC has one squawk:
> > >
> > > vgdb.c: In function ‘standalone_send_commands’:
> > > vgdb.c:1008:21: warning: ‘%02x’ directive writing between 2 and 8
> > > bytes into a r
> > > egion of size 3 [-Wformat-overflow=]
> > >        sprintf(hex, "%02x", cksum);
> > >                      ^~~~
> > > vgdb.c:1008:20: note: directive argument in the range [0, 2147483647]
> > >        sprintf(hex, "%02x", cksum);
> > >                     ^~~~~~
> >
> > But cksum is an unsigned char, so value is be between [0, 255]. Which
> > is max 2 hex chars.
> >
> > Could you retry with GCC8 or GCC9?
> > And file a bug against GCC otherwise?
> 
> If Valgrind is interested in working around it without increasing the
> buffer size, then the format string "%.2x" should do the trick.

Although I appreciate having zero warning builds, I do believe this
should be filed and tracked in gcc. Or better understood why the
warning is triggering for you. I have been unable to trigger the
warning with GCC 7.3.1 on either amd64 or i686. So I am wondering if
it is somehow arm specific? (Does arm have signed or unsigned char by
default? Does that matter?) Also the fact that it does trigger with
"%02x", but not "%.2x" is suspecious IMHO. Both should indicate that
the value is at least 2 chars, but maybe more. So why does one trigger
the warning, but not the other?

> $ cat test.c
> #include

Missing stdio.h ?

> int main(int argc, char* argv[])
> {
>     char buf[3];
>     sprintf(buf, "%.2x", (unsigned char)argc);
>     printf("%s\n", buf);
>     return 0;
> }
> 
> And:
> 
> $ gcc -Wall -Wformat-overflow=2 test.c -o test.exe

And I assume on your system this produces a warning replacing '.' with
'0'?  I have been unable to trigger the warning with GCC 7.3.1 and GCC
8.2.1 (on x86_64 with or without -m32). So I wonder where/when it does
trigger.

Cheers,

Mark


_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to