From: Eric Blake Date: Wed, 24 Sep 2008 16:55:19 +0000 (-0600) Subject: open, fopen: close fd leak in last patch X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=810a812bee90d6bab12e9628dc7745eea49f188c;p=pspp 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 --- diff --git a/ChangeLog b/ChangeLog index 22bf905ac9..49c1b2f9fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-09-24 Eric Blake + + 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 Ensure that a filename ending in a slash cannot be used to access a diff --git a/doc/posix-functions/fopen.texi b/doc/posix-functions/fopen.texi index 5fdb8dac4d..57794fb002 100644 --- a/doc/posix-functions/fopen.texi +++ b/doc/posix-functions/fopen.texi @@ -12,7 +12,7 @@ Portability problems fixed by Gnulib: 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. diff --git a/doc/posix-functions/open.texi b/doc/posix-functions/open.texi index ed3155da87..1986f0c3f6 100644 --- a/doc/posix-functions/open.texi +++ b/doc/posix-functions/open.texi @@ -12,7 +12,7 @@ Portability problems fixed by Gnulib: 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. diff --git a/lib/fopen.c b/lib/fopen.c index f64122b9f1..d6e048b79b 100644 --- a/lib/fopen.c +++ b/lib/fopen.c @@ -72,6 +72,7 @@ rpl_fopen (const char *filename, const char *mode) if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { + close (fd); errno = ENOTDIR; return NULL; } diff --git a/lib/open.c b/lib/open.c index 317fb8afac..97c30cee8c 100644 --- a/lib/open.c +++ b/lib/open.c @@ -115,6 +115,7 @@ open (const char *filename, int flags, ...) if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { + close (fd); errno = ENOTDIR; return -1; }