Hi Pavel & Jan, Your diagnosis is correct, the memory was being freed prematurely. I installed the attached patch. Thanks!
Regards, Sergey
>From c2886473a803c8e4a60f673e12ebf5b7d2c5a38a Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff <g...@gnu.org> Date: Wed, 21 Sep 2016 08:54:53 +0300 Subject: [PATCH] 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 --- src/tar.c | 3 ++- tests/Makefile.am | 1 + tests/options03.at | 44 ++++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 1 + 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 tests/options03.at diff --git a/src/tar.c b/src/tar.c index ba24c43..35bac38 100644 --- a/src/tar.c +++ b/src/tar.c @@ -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 0ea6d17..3e638e3 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 0000000..de8b16d --- /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 <j...@majutsushi.net> +# References: <20160906072153.c75tga556ti5s...@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 11c39c9..6fe5f89 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]) -- 1.8.4