changeset 10473:541a421c693f

open, fopen: close fd leak in last patch * lib/open.c (rpl_open): Close fd before returning error. * lib/fopen.c (rpl_fopen): Close fd before returning error. * doc/posix-functions/open.texi (open): Document that Irix also has the bug. * doc/posix-functions/fopen.texi (fopen): Likewise. Reported by Paolo Bonzini. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Wed, 24 Sep 2008 10:55:19 -0600
parents a4dc39a18d54
children 5fc74f43b3d6
files ChangeLog doc/posix-functions/fopen.texi doc/posix-functions/open.texi lib/fopen.c lib/open.c
diffstat 5 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-09-24  Eric Blake  <ebb9@byu.net>
+
+	open, fopen: close fd leak in last patch
+	* lib/open.c (rpl_open): Close fd before returning error.
+	* lib/fopen.c (rpl_fopen): Close fd before returning error.
+	* doc/posix-functions/open.texi (open): Document that Irix also
+	has the bug.
+	* doc/posix-functions/fopen.texi (fopen): Likewise.
+	Reported by Paolo Bonzini.
+
 2008-09-24  Bruno Haible  <bruno@clisp.org>
 
 	Ensure that a filename ending in a slash cannot be used to access a
--- a/doc/posix-functions/fopen.texi
+++ b/doc/posix-functions/fopen.texi
@@ -12,7 +12,7 @@
 This function does not fail when the file name argument ends in a slash
 and (without the slash) names a nonexistent file or a file that is not a
 directory, on some platforms:
-HP-UX 11.00, Solaris 9.
+HP-UX 11.00, Solaris 9, Irix 5.3.
 @item
 On Windows platforms (excluding Cygwin), this function does usually not
 recognize the @file{/dev/null} filename.
--- a/doc/posix-functions/open.texi
+++ b/doc/posix-functions/open.texi
@@ -12,7 +12,7 @@
 This function does not fail when the file name argument ends in a slash
 and (without the slash) names a nonexistent file or a file that is not a
 directory, on some platforms:
-HP-UX 11.00, Solaris 9.
+HP-UX 11.00, Solaris 9, Irix 5.3.
 @item
 On Windows platforms (excluding Cygwin), this function does usually not
 recognize the @file{/dev/null} filename.
--- a/lib/fopen.c
+++ b/lib/fopen.c
@@ -72,6 +72,7 @@
 
 	if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
 	  {
+	    close (fd);
 	    errno = ENOTDIR;
 	    return NULL;
 	  }
--- a/lib/open.c
+++ b/lib/open.c
@@ -115,6 +115,7 @@
 
 	  if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
 	    {
+	      close (fd);
 	      errno = ENOTDIR;
 	      return -1;
 	    }