Original problem reported for HP-UX LVM v2.2 by Michael White in <http://lists.gnu.org/archive/html/bug-tar/2012-10/msg00000.html>. This patch fixes some other gotchas that I noticed. * gnulib.modules: Add extern-inline. * src/common.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. (COMMON_INLINE, max, min): New macros. (represent_uintmax, valid_timespec): New inline functions. (SYSINT_BUFSIZE): New constant. (sysinttostr, strtosysint, decode_timespec): New decls. * src/create.c (start_private_header): Silently bring the time_t value into range; it is now the caller's responsibility to deal with any overflow error. Use uid 0 and gid 0 rather than the user's uid/gid, since the faked header isn't "owned" by the user and the uid/gid could in theory be out of range. Leave major and minor zeroed. (FILL): Remove. (write_gnu_long_link): Let start_private_header zero things out. * src/create.c (write_gnu_long_link, write_extended): * src/xheader.c (xheader_write_global): Use start_time, not current time; no point hammering on the clock. * src/compare.c (diff_multivol): Check that offset, size are in range. * src/incremen.c (read_incr_db_01, write_directory_file_entry): Allow negative time_t, dev_t, and ino_t. * src/list.c (max): Remove (moved to common.h). (read_header): Check that size is in range. (from_header): Return intmax_t, not uintmax_t, to allow negative. All callers changed. At compile time, check assumptions about intmax_t and uintmax_t. Use bool for booleans. Avoid overflow hassles on picky hosts. (mode_from_header): Last arg is now bool *, not unsigned *. All callers changed. (simple_print_header): Do not assume UID, GID fit in 'long'. * src/list.c (from_header): * src/xheader.c (out_of_range_header): Arg is now a plain minimum value, not minus minval converted to uintmax_t. All callers changed. * src/misc.c (COMMON_INLINE): New macro. (sysinttostr, strtosysint, decode_timespec): New functions. * src/sparse.c (oldgnu_add_sparse, oldgnu_fixup_header) (star_fixup_header): Check for offset overflow. (decode_num): Clear errno before calling strtoumax. * src/tar.c (expand_pax_option): Don't discard nanoseconds. * src/xheader.c (assign_time_option): Allow negative time_t. (decode_record): Simplify, since out-of-range string is guaranteed to produce a value exceeding len_max. (xheader_read): Last arg is off_t, not size_t. Caller should diagnose negative arg, as needed. Check that it's in range. (enum decode_time_status): Remove. (_decode_time): Remove, folding into decode_time. (decode_time): Return bool, not enum decode_time_status. Rely on decode_timespec to do most of the work. (code_signed_num): New function. (code_num): Use it. (decode_signed_num): New function. (decode_num): Use it. (gid_coder, gid_decoder, uid_coder, uid_decoder, sparse_map_decoder) (sparse_map_decoder): Code and decode negative values. (sparse_map_decoder): Improve check for out-of-range values. * tests/time01.at: New file. * tests/Makefile.am (TESTSUITE_AT): Add it. * tests/testsuite.at: Include it.
232 lines
4.6 KiB
Makefile
232 lines
4.6 KiB
Makefile
# Makefile for GNU tar regression tests.
|
|
|
|
# Copyright (C) 1996, 1997, 1999, 2000, 2001, 2003, 2004, 2005,
|
|
# 2006, 2007, 2009, 2012 Free Software Foundation, Inc.
|
|
|
|
# François Pinard <pinard@iro.umontreal.ca>, 1988.
|
|
# Sergey Poznyakoff <gray@mirddin.farlep.net>, 2004.
|
|
|
|
## This program 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, or (at your option)
|
|
## any later version.
|
|
|
|
## This program 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, write to the Free Software
|
|
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
## 02110-1301, USA.
|
|
|
|
EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 star/README star/quicktest.sh
|
|
DISTCLEANFILES = atconfig $(check_SCRIPTS)
|
|
MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
|
|
|
|
## ------------ ##
|
|
## package.m4. ##
|
|
## ------------ ##
|
|
|
|
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
|
|
{ \
|
|
echo '# Signature of the current package.'; \
|
|
echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \
|
|
echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \
|
|
echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \
|
|
echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \
|
|
echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \
|
|
} >$(srcdir)/package.m4
|
|
|
|
#
|
|
|
|
## ------------ ##
|
|
## Test suite. ##
|
|
## ------------ ##
|
|
|
|
TESTSUITE_AT = \
|
|
T-empty.at\
|
|
T-null.at\
|
|
testsuite.at\
|
|
append.at\
|
|
append01.at\
|
|
append02.at\
|
|
append03.at\
|
|
backup01.at\
|
|
chtype.at\
|
|
comprec.at\
|
|
delete01.at\
|
|
delete02.at\
|
|
delete03.at\
|
|
delete04.at\
|
|
delete05.at\
|
|
exclude.at\
|
|
exclude01.at\
|
|
exclude02.at\
|
|
exclude03.at\
|
|
exclude04.at\
|
|
exclude05.at\
|
|
exclude06.at\
|
|
exclude07.at\
|
|
extrac01.at\
|
|
extrac02.at\
|
|
extrac03.at\
|
|
extrac04.at\
|
|
extrac05.at\
|
|
extrac06.at\
|
|
extrac07.at\
|
|
extrac08.at\
|
|
extrac09.at\
|
|
extrac10.at\
|
|
extrac11.at\
|
|
extrac12.at\
|
|
extrac13.at\
|
|
extrac14.at\
|
|
extrac15.at\
|
|
extrac16.at\
|
|
extrac17.at\
|
|
extrac18.at\
|
|
extrac19.at\
|
|
filerem01.at\
|
|
filerem02.at\
|
|
gzip.at\
|
|
grow.at\
|
|
incremental.at\
|
|
incr01.at\
|
|
incr02.at\
|
|
incr03.at\
|
|
incr04.at\
|
|
incr05.at\
|
|
incr06.at\
|
|
indexfile.at\
|
|
ignfail.at\
|
|
label01.at\
|
|
label02.at\
|
|
label03.at\
|
|
label04.at\
|
|
label05.at\
|
|
link01.at\
|
|
link02.at\
|
|
link03.at\
|
|
link04.at\
|
|
listed01.at\
|
|
listed02.at\
|
|
listed03.at\
|
|
listed04.at\
|
|
listed05.at\
|
|
long01.at\
|
|
longv7.at\
|
|
lustar01.at\
|
|
lustar02.at\
|
|
lustar03.at\
|
|
multiv01.at\
|
|
multiv02.at\
|
|
multiv03.at\
|
|
multiv04.at\
|
|
multiv05.at\
|
|
multiv06.at\
|
|
multiv07.at\
|
|
multiv08.at\
|
|
old.at\
|
|
options.at\
|
|
options02.at\
|
|
owner.at\
|
|
pipe.at\
|
|
recurse.at\
|
|
rename01.at\
|
|
rename02.at\
|
|
rename03.at\
|
|
rename04.at\
|
|
rename05.at\
|
|
remfiles01.at\
|
|
remfiles02.at\
|
|
remfiles03.at\
|
|
same-order01.at\
|
|
same-order02.at\
|
|
shortfile.at\
|
|
shortupd.at\
|
|
shortrec.at\
|
|
sigpipe.at\
|
|
sparse01.at\
|
|
sparse02.at\
|
|
sparse03.at\
|
|
sparse04.at\
|
|
sparsemv.at\
|
|
sparsemvp.at\
|
|
spmvp00.at\
|
|
spmvp01.at\
|
|
spmvp10.at\
|
|
time01.at\
|
|
truncate.at\
|
|
update.at\
|
|
update01.at\
|
|
update02.at\
|
|
volsize.at\
|
|
volume.at\
|
|
verbose.at\
|
|
verify.at\
|
|
version.at\
|
|
xform-h.at\
|
|
xform01.at\
|
|
star/gtarfail.at\
|
|
star/gtarfail2.at\
|
|
star/multi-fail.at\
|
|
star/ustar-big-2g.at\
|
|
star/ustar-big-8g.at\
|
|
star/pax-big-10g.at\
|
|
xattr01.at\
|
|
xattr02.at\
|
|
xattr03.at\
|
|
xattr04.at\
|
|
xattr05.at\
|
|
acls01.at\
|
|
acls02.at\
|
|
selnx01.at\
|
|
selacl01.at\
|
|
capabs_raw01.at
|
|
|
|
TESTSUITE = $(srcdir)/testsuite
|
|
|
|
AUTOTEST = $(AUTOM4TE) --language=autotest
|
|
$(TESTSUITE): package.m4 $(TESTSUITE_AT)
|
|
$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
|
|
mv $@.tmp $@
|
|
|
|
atconfig: $(top_builddir)/config.status
|
|
cd $(top_builddir) && ./config.status tests/$@
|
|
|
|
clean-local:
|
|
test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
|
|
|
|
check-local: atconfig atlocal $(TESTSUITE)
|
|
$(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
|
|
|
|
check-full:
|
|
FULL_TEST=1 $(MAKE) check
|
|
|
|
#check_SCRIPTS = tar
|
|
|
|
# Run the test suite on the *installed* tree.
|
|
installcheck-local:
|
|
$(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS) AUTOTEST_PATH=$(exec_prefix)/bin
|
|
|
|
|
|
## ------------ ##
|
|
## genfile ##
|
|
## ------------ ##
|
|
|
|
check_PROGRAMS = genfile
|
|
|
|
genfile_SOURCES = genfile.c argcv.c argcv.h
|
|
|
|
localedir = $(datadir)/locale
|
|
AM_CPPFLAGS = \
|
|
-I$(top_srcdir)/gnu\
|
|
-I../gnu\
|
|
-I$(top_srcdir)/gnu\
|
|
-I$(top_srcdir)/lib\
|
|
-DLOCALEDIR=\"$(localedir)\"
|
|
|
|
LDADD = ../gnu/libgnu.a $(LIBINTL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS)
|