summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-09 20:41:58 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-06-10 10:48:25 +0200
commitbdc42211700ef0f6f40e4ef3f362e52d684d70fb (patch)
treeac3f4bbe8748cccb2561dee67dcb21700c0e6fe3
parent554bc997e4f619c72f883fd68cc896df96de58e5 (diff)
downloadapt-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.cc5
-rw-r--r--test/integration/framework8
-rwxr-xr-xtest/integration/test-apt-helper-cat-file30
-rwxr-xr-xtest/integration/test-compressed-indexes2
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'