fclose destroys file descriptor Closes #1390
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 16 Nov 2015 20:57:57 +0000 (15:57 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 16 Nov 2015 20:58:04 +0000 (15:58 -0500)
src/lib/missing.c

index 5782bb7..fd3e636 100644 (file)
@@ -196,12 +196,19 @@ int vdprintf (int fd, const char *format, va_list args)
 {
        int     ret;
        FILE    *fp;
+       int     dup_fd;
+
+       dup_fd = dup(fd);
+       if (dup_fd < 0) return -1;
 
        fp = fdopen(fd, "w");
-       if (!fp) return -1;
+       if (!fp) {
+               close(dup_fd);
+               return -1;
+       }
 
        ret = vfprintf(fp, format, args);
-       fclose(fp);
+       fclose(fp);     /* Also closes dup_fd */
 
        return ret;
 }