chiark / gitweb /
dgit: libcurl usage: Install SIGPIPE handler ourselv
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 23 Jul 2019 17:22:26 +0000 (18:22 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 23 Jul 2019 20:57:59 +0000 (21:57 +0100)
We don't want a global SIGPIPE setting.  In particular we do not want
to run any of subprocesses with SIGPIPE ignored.

Just in case libcurl gets this wrong, tell it CURLOPT_NOSIGNAL, and do
it ourselves.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
dgit

diff --git a/dgit b/dgit
index 696978b2ee7abb53f26fa198652666b1e18c2e4d..5bd648a2b14447fef2919e582f02c25e6d189537 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -1209,6 +1209,7 @@ sub archive_api_query_curl ($) {
     my $response_body;
     $setopt->(CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS|CURLPROTO_HTTP);
     $setopt->(CURLOPT_URL,             $url);
+    $setopt->(CURLOPT_NOSIGNAL,        1);
     $setopt->(CURLOPT_WRITEDATA,       \$response_body);
 
     if ($url =~ m#^https://([-.0-9a-z]+)/#) {
@@ -1221,6 +1222,8 @@ sub archive_api_query_curl ($) {
 
     printdebug "archive api query: fetching $url...\n";
 
+    local $SIG{PIPE} = 'IGNORE';
+
     my $x = $curl->perform();
     fail f_ "fetch of %s failed (%s): %s",
        $url, $curl->strerror($x), $curl->errbuf