mirror of
https://git.savannah.gnu.org/git/tar.git
synced 2026-04-26 19:35:16 +00:00
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.
82 lines
844 B
Plaintext
82 lines
844 B
Plaintext
# List of gnulib modules needed for GNU tar.
|
|
# A module name per line. Empty lines and comments are ignored.
|
|
|
|
acl
|
|
alloca
|
|
argmatch
|
|
argp
|
|
argp-version-etc
|
|
backupfile
|
|
closeout
|
|
configmake
|
|
dirname
|
|
error
|
|
exclude
|
|
extern-inline
|
|
exitfail
|
|
fchmodat
|
|
fchownat
|
|
fcntl-h
|
|
fdopendir
|
|
fdutimensat
|
|
fileblocks
|
|
fnmatch-gnu
|
|
fseeko
|
|
fstatat
|
|
full-write
|
|
futimens
|
|
getline
|
|
getopt-gnu
|
|
getpagesize
|
|
gettext
|
|
gettime
|
|
gitlog-to-changelog
|
|
hash
|
|
human
|
|
inttostr
|
|
inttypes
|
|
lchown
|
|
linkat
|
|
localcharset
|
|
manywarnings
|
|
mkdirat
|
|
mkdtemp
|
|
mkfifoat
|
|
modechange
|
|
obstack
|
|
openat
|
|
parse-datetime
|
|
priv-set
|
|
progname
|
|
quote
|
|
quotearg
|
|
readlinkat
|
|
renameat
|
|
root-uid
|
|
rpmatch
|
|
safe-read
|
|
savedir
|
|
selinux-at
|
|
setenv
|
|
snprintf
|
|
stat-time
|
|
stdbool
|
|
stdint
|
|
stpcpy
|
|
strdup-posix
|
|
strerror
|
|
strtol
|
|
strtoul
|
|
symlinkat
|
|
timespec
|
|
unlinkat
|
|
unlinkdir
|
|
unlocked-io
|
|
utimensat
|
|
version-etc-fsf
|
|
xalloc
|
|
xalloc-die
|
|
xgetcwd
|
|
xstrtoumax
|
|
xvasprintf
|