diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2014-03-20 16:28:25 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2014-03-20 19:46:30 +0200 |
commit | b0902369e789c9aadf584799889a34637688d601 (patch) | |
tree | 0b7e8b02e913f6a5c5a703d1e1e0ee882568a3d9 /src/buffer.c | |
parent | da546e69afb2120a4c8a61ecadb5a66bf56cfa5d (diff) | |
download | tar-b0902369e789c9aadf584799889a34637688d601.tar.gz |
Fail if archive comes from a terminal.
Based on patch from Pavel Raiskup <praiskup@redhat.com>.
* gnulib.modules: Add new modules.
* src/buffer.c (_open_archive): Refuse to read archive from a tty.
* tests/Makefile.am (TESTSUITE_AT): Add iotty.at
(check_PROGRAMS): New program ttyemu
* tests/testsuite.at: Include iotty.at
* tests/iotty.at: New file.
* tests/ttyemu.c: New file.
Diffstat (limited to 'src/buffer.c')
-rw-r--r-- | src/buffer.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/buffer.c b/src/buffer.c index 95e8a26d..248dd880 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -689,6 +689,16 @@ _open_archive (enum access_mode wanted_access) /* When updating the archive, we start with reading. */ access_mode = wanted_access == ACCESS_UPDATE ? ACCESS_READ : wanted_access; + /* Refuse to read archive from a tty. + Do not fail if the tar's output goes directly to tty because such + behavior would go against GNU Coding Standards: + http://lists.gnu.org/archive/html/bug-tar/2014-03/msg00042.html */ + if (strcmp (archive_name_array[0], "-") == 0 + && wanted_access == ACCESS_READ && isatty (STDIN_FILENO)) + FATAL_ERROR ((0, 0, + _("Refusing to read archive contents from terminal " + "(missing -f option?)"))); + read_full_records = read_full_records_option; records_read = 0; @@ -731,7 +741,6 @@ _open_archive (enum access_mode wanted_access) enum compress_type type; archive = STDIN_FILENO; - type = check_compressed_archive (&shortfile); if (type != ct_tar && type != ct_none) FATAL_ERROR ((0, 0, |