diff options
author | Eric Blake <ebb9@byu.net> | 2009-11-05 12:19:45 -0700 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-11-07 10:10:25 -0700 |
commit | c768e2231b89901a2e29c3bf96c027b64f8646d9 (patch) | |
tree | ef0381745bb5f50fd882100375921cccfd3ddd87 | |
parent | 9a8d8f46a541d333f98dca26d053d1f5bd4424bb (diff) | |
download | coreutils-c768e2231b89901a2e29c3bf96c027b64f8646d9.tar.xz |
mktemp: fix bug with -q and closed stdout
If stdin or stdout is closed, then freopen(,stderr) can violate
the premise that STDERR_FILENO==fileno(stderr), which in turn
breaks mktemp -q.
* bootstrap.conf (gnulib_modules): Add freopen-safer.
* src/mktemp.c (includes): Use stdio--.h.
* tests/misc/close-stdout: Enhance test to catch bug.
-rw-r--r-- | bootstrap.conf | 1 | ||||
-rw-r--r-- | src/mktemp.c | 2 | ||||
-rwxr-xr-x | tests/misc/close-stdout | 6 |
3 files changed, 6 insertions, 3 deletions
diff --git a/bootstrap.conf b/bootstrap.conf index 3a263948f..d1e80a469 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -92,6 +92,7 @@ gnulib_modules=" fopen-safer fprintftime freopen + freopen-safer fseeko fsusage fsync diff --git a/src/mktemp.c b/src/mktemp.c index 6ce40f133..303b9ce9e 100644 --- a/src/mktemp.c +++ b/src/mktemp.c @@ -17,7 +17,6 @@ /* Written by Jim Meyering and Eric Blake. */ #include <config.h> -#include <stdio.h> #include <sys/types.h> #include <getopt.h> @@ -27,6 +26,7 @@ #include "error.h" #include "filenamecat.h" #include "quote.h" +#include "stdio--.h" #include "tempname.h" /* The official name of this program (e.g., no `g' prefix). */ diff --git a/tests/misc/close-stdout b/tests/misc/close-stdout index 852c3c822..ae2350dce 100755 --- a/tests/misc/close-stdout +++ b/tests/misc/close-stdout @@ -52,7 +52,8 @@ if "$p/src/test" -w /dev/stdout >/dev/null && cp --verbose a b >&- 2>/dev/null && fail=1 rm -Rf tmpfile-?????? || fail=1 mktemp tmpfile-XXXXXX >&- 2>/dev/null && fail=1 - test -e tmpfile-?????? && fail=1 + mktemp tmpfile-XXXXXX -q >&- 2>/dev/null && fail=1 + case `echo tmpfile-??????` in 'tmpfile-??????') ;; *) fail=1 ;; esac fi # Likewise for /dev/full, if /dev/full works. @@ -61,7 +62,8 @@ if test -w /dev/full && test -c /dev/full; then cp --verbose a b >/dev/full 2>/dev/null && fail=1 rm -Rf tmpdir-?????? || fail=1 mktemp -d tmpdir-XXXXXX >/dev/full 2>/dev/null && fail=1 - test -e tmpdir-?????? && fail=1 + mktemp -d -q tmpdir-XXXXXX >/dev/full 2>/dev/null && fail=1 + case `echo tmpfile-??????` in 'tmpfile-??????') ;; *) fail=1 ;; esac fi Exit $fail |