]> andersk Git - openssh.git/blobdiff - openbsd-compat/bsd-asprintf.c
- (tim) [configure.ac] Remove setting IP_TOS_IS_BROKEN for Cygwin. The problem
[openssh.git] / openbsd-compat / bsd-asprintf.c
index 1178296f8a147e4ae19defaa8205a309e9730b08..3368195d443ae1a8470528ecf0211ccdfba17847 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <errno.h>
 #include <stdarg.h>
+#include <stdlib.h>
 
 #ifndef VA_COPY
 # ifdef HAVE_VA_COPY
@@ -38,7 +39,8 @@
 
 #define INIT_SZ        128
 
-int vasprintf(char **str, const char *fmt, va_list ap)
+int
+vasprintf(char **str, const char *fmt, va_list ap)
 {
        int ret = -1;
        va_list ap2;
@@ -52,7 +54,8 @@ int vasprintf(char **str, const char *fmt, va_list ap)
        ret = vsnprintf(string, INIT_SZ, fmt, ap2);
        if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */
                *str = string;
-       } else if (ret == INT_MAX) { /* shouldn't happen */
+       } else if (ret == INT_MAX || ret < 0) { /* Bad length */
+               free(string);
                goto fail;
        } else {        /* bigger than initial, realloc allowing for nul */
                len = (size_t)ret + 1;
This page took 0.064742 seconds and 4 git commands to generate.