diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2016-09-21 08:54:53 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2016-09-21 08:58:10 +0300 |
commit | c2886473a803c8e4a60f673e12ebf5b7d2c5a38a (patch) | |
tree | 59ce9780b27483ecd993d68cff32fe5ee8218e98 | |
parent | ac065c57fdc1788a2769fb119ed0c8146e1b9dd6 (diff) | |
download | tar-c2886473a803c8e4a60f673e12ebf5b7d2c5a38a.tar.gz |
Fix passing string values via TAR_OPTIONS
* src/tar.c (parse_default_options): Don't free parsed words.
* tests/options03.at: New testcase.
* tests/Makefile.am: Add options03.at
* tests/testsuite.at: Include options03.at
-rw-r--r-- | src/tar.c | 3 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/options03.at | 44 | ||||
-rw-r--r-- | tests/testsuite.at | 1 |
4 files changed, 48 insertions, 1 deletions
@@ -2201,8 +2201,9 @@ parse_default_options (void) { ws.ws_wordv[0] = (char*) program_name; more_options (ws.ws_offs + ws.ws_wordc, ws.ws_wordv, &loc); + /* Don't free consumed words */ + ws.ws_wordc = 0; } - wordsplit_free (&ws); } diff --git a/tests/Makefile.am b/tests/Makefile.am index 0ea6d172..3e638e37 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -171,6 +171,7 @@ TESTSUITE_AT = \ positional03.at\ options.at\ options02.at\ + options03.at\ owner.at\ pipe.at\ recurse.at\ diff --git a/tests/options03.at b/tests/options03.at new file mode 100644 index 00000000..de8b16df --- /dev/null +++ b/tests/options03.at @@ -0,0 +1,44 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- +# +# Test suite for GNU tar. +# Copyright 2016 Free Software Foundation, Inc. +# +# This file is part of GNU tar. +# +# GNU tar is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# GNU tar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +AT_SETUP([TAR_OPTIONS with string arguments]) +AT_KEYWORDS([options options03]) + +# Check whether string values are passed correctly through the +# TAR_OPTIONS environment variable. In tar 1.29 the stored values +# were inadvertenlty freedm which caused TAR_OPTION to malfunction. +# Reported by: Jan Larres <jan@majutsushi.net> +# References: <20160906072153.c75tga556ti5sgk2@majutsushi.net>, +# http://lists.gnu.org/archive/html/bug-tar/2016-09/msg00005.html + +AT_CHECK([ +echo dir/bar > exclude.list +mkdir dir +genfile --file=dir/foo +genfile --file=dir/bar +TAR_OPTIONS=--exclude-from=exclude.list tar cf arc.tar dir +tar tf arc.tar +], +[0], +[dir/ +dir/foo +]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index 11c39c9f..6fe5f89c 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -204,6 +204,7 @@ m4_include([pipe.at]) m4_include([options.at]) m4_include([options02.at]) +m4_include([options03.at]) AT_BANNER([Option compatibility]) m4_include([opcomp01.at]) |