]> git.saurik.com Git - apt.git/commitdiff
do not hang on piped input in PipedFileFdPrivate
authorDavid Kalnischkies <david@kalnischkies.de>
Thu, 9 Jun 2016 18:41:58 +0000 (20:41 +0200)
committerJulian Andres Klode <jak@debian.org>
Fri, 10 Jun 2016 13:25:12 +0000 (15:25 +0200)
This effects only compressors configured on the fly (rather then the
inbuilt ones as they use a library).

(cherry picked from commit bdc42211700ef0f6f40e4ef3f362e52d684d70fb)

apt-pkg/contrib/fileutl.cc
test/integration/framework
test/integration/test-apt-helper-cat-file [new file with mode: 0755]
test/integration/test-compressed-indexes

index cde005eb52bc674bfdeff6efaa6c883e52ca9bcb..d880a725df73403513270001160751d19184913a 100644 (file)
@@ -1974,6 +1974,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;
index d020d4a7db6827decb89fa07cc6c3d6bef74f5c5..ca0a3b5deaddf651f3fcdb04b8d044663e3d2b19 100644 (file)
@@ -528,6 +528,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
@@ -952,7 +956,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"
@@ -963,7 +967,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 (executable)
index 0000000..f7c94a2
--- /dev/null
@@ -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"
index 7ddf2e2e2904972183befaa9c369f13df615695a..b7e84300e5c305f02d331457490ddc14649734c9 100755 (executable)
@@ -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'