On 10/17/07, Macy Gasp <[EMAIL PROTECTED]> wrote: > Hi everybody, > > I'm experiencing a weird behaviour when using va_list with gcc 4.1.2 > on a x86_64 linux distribution. > > Below is my test program (yes, I know about the possible buffer > overflows but please, bear with me, this is just a proof of concept): > > #include <stdio.h> > #include <stdarg.h> > > int var(const char* fmt, ...) > { > va_list args; > char buf[4096]; > > va_start(args, fmt); >
--- no va_copy > vsprintf(buf, fmt, args); > fprintf(stderr,"\n[%s]", buf); > -- args is semi invalid here. > vsprintf(buf, fmt, args); > fprintf(stderr,"\n[%s]", buf); > > va_end(args); > > return 0; > } You forgot to call va_copy. -- Pinski