diff options
author | David Kalnischkies <david@kalnischkies.de> | 2016-06-09 20:41:58 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2016-06-10 10:48:25 +0200 |
commit | bdc42211700ef0f6f40e4ef3f362e52d684d70fb (patch) | |
tree | ac3f4bbe8748cccb2561dee67dcb21700c0e6fe3 | |
parent | 554bc997e4f619c72f883fd68cc896df96de58e5 (diff) | |
download | apt-bdc42211700ef0f6f40e4ef3f362e52d684d70fb.tar.gz |
do not hang on piped input in PipedFileFdPrivate
This effects only compressors configured on the fly (rather then the
inbuilt ones as they use a library).
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 5 | ||||
-rw-r--r-- | test/integration/framework | 8 | ||||
-rwxr-xr-x | test/integration/test-apt-helper-cat-file | 30 | ||||
-rwxr-xr-x | test/integration/test-compressed-indexes | 2 |
4 files changed, 42 insertions, 3 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 9990b753a..6bfa5ca92 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -1978,6 +1978,11 @@ public: virtual bool InternalClose(std::string const &) APT_OVERRIDE { bool Ret = true; + if (filefd->iFd != -1) + { + close(filefd->iFd); + filefd->iFd = -1; + } if (compressor_pid > 0) Ret &= ExecWait(compressor_pid, "FileFdCompressor", true); compressor_pid = -1; diff --git a/test/integration/framework b/test/integration/framework index b7bee8a57..3f7101170 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -539,6 +539,10 @@ EOF testempty --nomsg gcc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c -ldl } configcompression() { + if [ "$1" = 'ALL' ]; then + configcompression '.' $(aptconfig dump APT::Compressor --format '%t %v%n' | sed -n 's#^Extension \.\(.*\)$#\1#p') + return + fi local CMD='apthelper cat-file -C' while [ -n "$1" ]; do case "$1" in @@ -963,7 +967,7 @@ buildaptarchivefromfiles() { } compressfile() { - cat "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" | while read compressor extension command; do + while read compressor extension command; do if [ "$compressor" = '.' ]; then if [ -n "$2" ]; then touch -d "$2" "$1" @@ -974,7 +978,7 @@ compressfile() { if [ -n "$2" ]; then touch -d "$2" "${1}.${extension}" fi - done + done < "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" } # can be overridden by testcases for their pleasure diff --git a/test/integration/test-apt-helper-cat-file b/test/integration/test-apt-helper-cat-file new file mode 100755 index 000000000..f7c94a2b4 --- /dev/null +++ b/test/integration/test-apt-helper-cat-file @@ -0,0 +1,30 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" +setupenvironment + +cat >rootdir/etc/apt/apt.conf.d/rev-as-compressor <<EOF +APT::Compressor::rev { + Name "rev"; + Extension ".rev"; + Binary "rev"; + Cost "1"; +}; +EOF + +configcompression 'ALL' +cat >./test.txt <<EOF +This is a test. +EOF + +compressfile ./test.txt +while read compressor extension command; do + if [ "$compressor" = '.' ]; then + FILE='./test.txt' + else + FILE="./test.txt.${extension}" + fi + testsuccessequal "$(cat ./test.txt)" apthelper cat-file "$FILE" +done < "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" diff --git a/test/integration/test-compressed-indexes b/test/integration/test-compressed-indexes index d544ac89f..b8bb58953 100755 --- a/test/integration/test-compressed-indexes +++ b/test/integration/test-compressed-indexes @@ -5,7 +5,7 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment -configcompression '.' $(aptconfig dump APT::Compressor --format '%t %v%n' | sed -n 's#^Extension \.\(.*\)$#\1#p') +configcompression 'ALL' configarchitecture 'i386' LOWCOSTEXT='lz4' |