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.

$ cat test.c
#include
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
$ ./test.exe a b c d
05
$ ./test.exe a b c d e f g h i
0a
$ ./test.exe a b c d e f g h i j k l m n o p q r s t u v w x y z
1b


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

Reply via email to