xzdiff: Create a temporary directory to hold a temporary file.

This avoids the possibility of "File name too long" when
creating a temp file when the input file name is very long.

This also means that other users on the system can no longer
see the input file names in /tmp (or whatever $TMPDIR is)
since the temporary directory will have a generic name. This
usually doesn't matter since on many systems one can see
the arguments given to all processes anyway.

The number X chars to mktemp where increased from 6 to 10.

Note that with some shells temp files or dirs won't be used at all.
This commit is contained in:
Lasse Collin 2014-11-10 18:45:01 +02:00
parent 7716dcf9df
commit f8c13e5e36
1 changed files with 5 additions and 5 deletions

View File

@ -136,18 +136,18 @@ elif test $# -eq 2; then
F=`expr "/$2" : '.*/\(.*\)[-.][ablmotxz2]*$'` || F=$prog
tmp=
trap '
test -n "$tmp" && rm -f "$tmp"
test -n "$tmp" && rm -rf "$tmp"
(exit 2); exit 2
' HUP INT PIPE TERM 0
tmp=`mktemp -t -- "$F.XXXXXX"` || exit 2
$xz2 -cdfq -- "$2" > "$tmp" || exit 2
tmp=`mktemp -t -d -- "$prog.XXXXXXXXXX"` || exit 2
$xz2 -cdfq -- "$2" > "$tmp/$F" || exit 2
xz_status=$(
exec 4>&1
($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
eval "$cmp" - '"$tmp"' >&3
eval "$cmp" - '"$tmp/$F"' >&3
)
cmp_status=$?
rm -f "$tmp" || xz_status=$?
rm -rf "$tmp" || xz_status=$?
trap - HUP INT PIPE TERM 0
(exit $cmp_status)
fi;;