I believe I have found a memory leak in the Cygwin version of vsnprintf(). If it is called with a NULL 'str' parameter and a 0 'length', it leaks a BUFSIZ-sized buffer. (Per C99 and SUSv3, calling vsnprintf() with a NULL 'str' and 0 'length' is a way to find out how big the formatted string would be without actually storing it anywhere.)

I see that Cygwin's vsnprintf() comes from newlib. Should I report this to them instead?

Here is an example program:

   #include <stdio.h>
   #include <stdarg.h>

   int
   waste_it(char *fmt, ...)
   {
           int ns;
           va_list a;

           va_start(a, fmt);
           ns = vsnprintf(NULL, 0, fmt, a);
           va_end(a);
           return ns;
   }

   main(int argc, char *argv[])
   {
           int i;
           int n;

           for (i = 0; i < 10000; i++) {
                   n += waste_it("%s foo %d", "hello", 49);
           }
   }

This program will consume quite a lot of memory on Cygwin.

--
       pdm


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to