[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: getcwd.c fix: don't use closed FD

From: Jim Meyering
Subject: FYI: getcwd.c fix: don't use closed FD
Date: Mon, 19 Feb 2007 21:07:19 +0100

I don't know of a system on which this bug can be exercised.
I found it only by manually building getcwd.o, even though
this system already has a mostly-working one.
The symptom is that getcwd would always fail with ENOENT.

        Don't use FD after a successful "fdopendir (fd)".
        * lib/getcwd.c (__getcwd) [AT_FDCWD]: fdopendir (fd) usually closes fd.
        Reset it by calling dirfd on the just-obtained DIR*.

Index: lib/getcwd.c
RCS file: /sources/gnulib/gnulib/lib/getcwd.c,v
retrieving revision 1.19
diff -u -p -r1.19 getcwd.c
--- lib/getcwd.c        19 Feb 2007 02:24:42 -0000      1.19
+++ lib/getcwd.c        19 Feb 2007 20:03:17 -0000
@@ -234,6 +234,8 @@ __getcwd (char *buf, size_t size)
       dirstream = fdopendir (fd);
       if (dirstream == NULL)
        goto lose;
+      /* Reset fd.  It may have been closed by fdopendir.  */
+      fd = dirfd (dirstream);
       fd_needs_closing = false;
       dirstream = __opendir (dotlist);

reply via email to

[Prev in Thread] Current Thread [Next in Thread]