From: Jim Meyering <meyering@redhat.com>
Date: Mon, 13 Sep 2010 05:29:18 +0000 (+0200)
Subject: fts: don't operate on an invalid file descriptor after failed dup
X-Git-Tag: v0.1~3816
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=40af2cd5c8a49d2eaaaf6c0cd54ce0198282f9fa;p=gnulib.git

fts: don't operate on an invalid file descriptor after failed dup

* lib/fts.c (fts_build): Don't call set_cloexec_flag on a
negative file descriptor.
---

diff --git a/ChangeLog b/ChangeLog
index 8e6c3c23b4..9910da220e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-09-13  Jim Meyering  <meyering@redhat.com>
+
+	fts: don't operate on an invalid file descriptor after failed dup
+	* lib/fts.c (fts_build): Don't call set_cloexec_flag on a
+	negative file descriptor.
+
 2010-09-12  Paul Eggert  <eggert@cs.ucla.edu>
 
 	savedir: add streamsavedir, deprecate fdsavedir
diff --git a/lib/fts.c b/lib/fts.c
index a308a8c94e..4b89ee780b 100644
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -1305,7 +1305,8 @@ fts_build (register FTS *sp, int type)
                 if (ISSET(FTS_CWDFD) && 0 <= dir_fd)
                   {
                     dir_fd = dup (dir_fd);
-                    set_cloexec_flag (dir_fd, true);
+                    if (0 <= dir_fd)
+                      set_cloexec_flag (dir_fd, true);
                   }
                 if (dir_fd < 0 || fts_safe_changedir(sp, cur, dir_fd, NULL)) {
                         if (nlinks && type == BREAD)