]> git.saurik.com Git - apt.git/commitdiff
don't close stdout/stderr if it is also the statusfd
authorDavid Kalnischkies <kalnischkies@gmail.com>
Fri, 15 Mar 2013 13:49:05 +0000 (14:49 +0100)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Fri, 15 Mar 2013 13:49:05 +0000 (14:49 +0100)
apt-pkg/contrib/gpgv.cc
debian/changelog

index 9760bd21f223c646b2bf70075fd063e191c01d02..94a1f8778cdbc567882b1af5e4d0ad50d85679b0 100644 (file)
@@ -2,14 +2,13 @@
 // Include Files                                                       /*{{{*/
 #include<config.h>
 
-#include <iostream>
-#include <sstream>
-#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
+
+#include <vector>
 
 #include <apt-pkg/error.h>
 #include <apt-pkg/strutl.h>
@@ -85,12 +84,12 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
    Args.push_back(gpgvpath.c_str());
    Args.push_back("--ignore-time-conflict");
 
+   char statusfdstr[10];
    if (statusfd != -1)
    {
       Args.push_back("--status-fd");
-      char fd[10];
-      snprintf(fd, sizeof(fd), "%i", statusfd);
-      Args.push_back(fd);
+      snprintf(statusfdstr, sizeof(fd), "%i", statusfd);
+      Args.push_back(statusfdstr);
    }
 
    for (vector<string>::const_iterator K = keyrings.begin();
@@ -131,8 +130,10 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
       int const nullfd = open("/dev/null", O_RDONLY);
       close(fd[0]);
       // Redirect output to /dev/null; we read from the status fd
-      dup2(nullfd, STDOUT_FILENO);
-      dup2(nullfd, STDERR_FILENO);
+      if (statusfd != STDOUT_FILENO)
+        dup2(nullfd, STDOUT_FILENO);
+      if (statusfd != STDERR_FILENO)
+        dup2(nullfd, STDERR_FILENO);
       // Redirect the pipe to the status fd (3)
       dup2(fd[1], statusfd);
 
index bd4116406f5d85d91f2b051ad88011c7a8c3a14c..0423cefa66017a4c1d52952eceae0f2dac04a8df 100644 (file)
@@ -6,6 +6,7 @@ apt (0.9.7.9) UNRELEASED; urgency=low
   * apt-pkg/contrib/gpgv.cc:
     - ExecGPGV is a method which should never return, so mark it as such
       and fix the inconsistency of returning in error cases
+    - don't close stdout/stderr if it is also the statusfd
 
  -- David Kalnischkies <kalnischkies@gmail.com>  Fri, 15 Mar 2013 14:15:43 +0100