teknoraver / rpms / rpm

Forked from rpms/rpm 4 months ago
Clone
Blob Blame History Raw
From 90d8cc16486479441477e89c2e09bd4f9f7604bb Mon Sep 17 00:00:00 2001
From: Lubos Kardos <lkardos@redhat.com>
Date: Fri, 30 Oct 2015 14:42:32 +0100
Subject: [PATCH] Ignore SIGPIPE signals during execucton of scriptlets
 (rhbz:1264198)

---
 lib/rpmscript.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/lib/rpmscript.c b/lib/rpmscript.c
index 493f4f2..98d3f42 100644
--- a/lib/rpmscript.c
+++ b/lib/rpmscript.c
@@ -271,6 +271,7 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
     const char *line;
     char *mline = NULL;
     rpmRC rc = RPMRC_FAIL;
+    struct sigaction newact, oldact;
 
     rpmlog(RPMLOG_DEBUG, "%s: scriptlet start\n", sname);
 
@@ -318,6 +319,12 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
 	goto exit;
     }
 
+    /* Ignore SIGPIPE during execution of scriptlets */
+    sigemptyset(&newact.sa_mask);
+    newact.sa_flags = 0;
+    newact.sa_handler = SIG_IGN;
+    sigaction(SIGPIPE, &newact, &oldact);
+
     pid = fork();
     if (pid == (pid_t) -1) {
 	rpmlog(RPMLOG_ERR, _("Couldn't fork %s: %s\n"),
@@ -428,6 +435,10 @@ exit:
 	free(fn);
     }
     free(mline);
+
+    /* Restore SIGPIPE handler */
+    sigaction(SIGPIPE, &oldact, NULL);
+
     return rc;
 }
 
-- 
1.9.3