The char dummy must be dummy[2] to accomodate a nul terminator when dealing
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 15 May 2008 03:59:59 +0000 (03:59 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 15 May 2008 03:59:59 +0000 (03:59 +0000)
with a degenerate buffer size.

Submitted-by: Johannes Hofmann <Johannes.Hofmann@gmx.de>
Taken-from: FreeBSD

lib/libc/stdio/vsnprintf.c

index eb6069a..cd19c71 100644 (file)
@@ -35,7 +35,7 @@
  *
  * @(#)vsnprintf.c     8.1 (Berkeley) 6/4/93
  * $FreeBSD: src/lib/libc/stdio/vsnprintf.c,v 1.12.2.1 2002/09/23 06:58:17 maxim Exp $
  *
  * @(#)vsnprintf.c     8.1 (Berkeley) 6/4/93
  * $FreeBSD: src/lib/libc/stdio/vsnprintf.c,v 1.12.2.1 2002/09/23 06:58:17 maxim Exp $
- * $DragonFly: src/lib/libc/stdio/vsnprintf.c,v 1.8 2006/03/02 18:05:30 joerg Exp $
+ * $DragonFly: src/lib/libc/stdio/vsnprintf.c,v 1.9 2008/05/15 03:59:59 dillon Exp $
  */
 
 #include <limits.h>
  */
 
 #include <limits.h>
@@ -50,7 +50,7 @@ vsnprintf(char *str, size_t n, const char *fmt, va_list ap)
 {
        size_t on;
        int ret;
 {
        size_t on;
        int ret;
-       char dummy;
+       char dummy[2];
        FILE f;
 
        on = n;
        FILE f;
 
        on = n;
@@ -60,7 +60,9 @@ vsnprintf(char *str, size_t n, const char *fmt, va_list ap)
                n = INT_MAX;
        /* Stdio internals do not deal correctly with zero length buffer */
        if (n == 0) {
                n = INT_MAX;
        /* Stdio internals do not deal correctly with zero length buffer */
        if (n == 0) {
-                str = &dummy;
+               if (on > 0)
+                       *str = '\0';
+               str = dummy;
                 n = 1;
        }
        f.pub._fileno = -1;
                 n = 1;
        }
        f.pub._fileno = -1;