From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: zsh-workers-return-43792-ml=inbox.vuxu.org@zsh.org X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id c59af618 for ; Wed, 7 Nov 2018 13:15:45 +0000 (UTC) Received: (qmail 265 invoked by alias); 7 Nov 2018 13:15:23 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43792 Received: (qmail 4218 invoked by uid 1010); 7 Nov 2018 13:15:23 -0000 X-Qmail-Scanner-Diagnostics: from mx1.redhat.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.132.183.28):SA:0(-6.9/5.0):. Processed in 0.770714 secs); 07 Nov 2018 13:15:23 -0000 X-Envelope-From: kdudka@redhat.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | From: Kamil Dudka To: zsh-workers@zsh.org Subject: [PATCH 3/5] Src/exec: avoid fd leak on fork() failure Date: Wed, 7 Nov 2018 14:04:54 +0100 Message-Id: <20181107130456.18901-3-kdudka@redhat.com> In-Reply-To: <20181107130456.18901-1-kdudka@redhat.com> References: <20181107130456.18901-1-kdudka@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Wed, 07 Nov 2018 13:04:59 +0000 (UTC) Detected by Coverity Analysis: Error: RESOURCE_LEAK (CWE-772): zsh-5.5.1/Src/exec.c:4680: open_fn: Returning handle opened by "open". zsh-5.5.1/Src/exec.c:4680: var_assign: Assigning: "fd" = handle returned from "open(nam, 449, 384)". zsh-5.5.1/Src/exec.c:4810: leaked_handle: Handle variable "fd" going out of scope leaks the handle. 4808| /* fork or open error */ 4809| child_unblock(); 4810|-> return nam; 4811| } else if (pid) { 4812| int os; --- Src/exec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Src/exec.c b/Src/exec.c index c4a2740c0..042ba065a 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -4805,7 +4805,8 @@ getoutputfile(char *cmd, char **eptr) } if ((cmdoutpid = pid = zfork(NULL)) == -1) { - /* fork or open error */ + /* fork error */ + close(fd); child_unblock(); return nam; } else if (pid) { -- 2.17.2