From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27479 invoked by alias); 14 Aug 2017 09:10:14 -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: X-Seq: 41544 Received: (qmail 14951 invoked by uid 1010); 14 Aug 2017 09:10:14 -0000 X-Qmail-Scanner-Diagnostics: from mailout4.w1.samsung.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(210.118.77.14):SA:0(-6.9/5.0):. Processed in 1.695393 secs); 14 Aug 2017 09:10:14 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-AuditID: cbfec7f5-f79d06d0000031c7-ff-599168ec8a64 Date: Mon, 14 Aug 2017 10:09:56 +0100 From: Peter Stephenson To: Zsh hackers list Subject: Re: fd used for saving redirected fds leaked to child processes Message-id: <20170814100956.363c7ea8@pwslap01u.europe.root.pri> In-reply-to: Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djPc7pvMyZGGrzcymxxsPkhkwOjx6qD H5gCGKO4bFJSczLLUov07RK4Mj6t+cFcMJ+n4nbDZcYGxiOcXYycHBICJhKfl61ngrDFJC7c W8/WxcjFISSwlFHi/qL5rCAJIYFeJomb7XwwDXdu32CCKFrGKNG7/jxU0TQmiY1t7hCJM4wS bet3skA4Zxklzjx8yg5SxSKgKrF9wVywDjYBQ4mpm2YzgtgiAloSO06eBLtDWMBD4uXpLWA1 vAL2EvPv3WABsTkFgiV2znwGNodfQF/i6t9PUHfbS8y8coYRol5Q4sfke2D1zAI6Etu2PWaH sOUlNq95ywxykITAfzaJszPeAyU4gBxZiU0HmCHmuEisOrGPHcIWlnh1fAuULSNxeXI3C4Td zyjxpNsXYs4MRonTZ3awQSSsJfpuX2SEWMYnMWnbdGaI+bwSHW1CECUeEkv+/mKBCDtK3HiX NIFRcRaSq2chuXoWkqsXMDKvYhRJLS3OTU8tNtUrTswtLs1L10vOz93ECEwCp/8d/7qDcekx q0OMAhyMSjy8M65PiBRiTSwrrsw9xCjBwawkwluWNjFSiDclsbIqtSg/vqg0J7X4EKM0B4uS OK9tVFukkEB6YklqdmpqQWoRTJaJg1OqgTGhX6CosvjS3wObvnV6nv58SZt97okS85mHGvet Zt17MdnTzNpRptQ1yneq+EaBfTt+HJxj8n5PSMEKoVhNeXa7PBMx8ef/HKyWTBf8++SRhUBk Yavr/pu9ly9p/G6Nzb7W94b9E/Px0oe6l2b7Kx+NVBfbo/S/XeaHnKbd/mPJuWI13s6n9JVY ijMSDbWYi4oTAauNESb+AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrOIsWRmVeSWpSXmKPExsVy+t/xK7pvMiZGGqzuUbc42PyQyYHRY9XB D0wBjFFuNhmpiSmpRQqpecn5KZl56bZKoSFuuhZKCnmJuam2ShG6viFBSgpliTmlQJ6RARpw cA5wD1bSt0twy/i05gdzwXyeitsNlxkbGI9wdjFyckgImEjcuX2DCcIWk7hwbz1bFyMXh5DA EkaJc/8PskM4M5gkuv9chsqcY5T4v62VEcI5yygxc/kBFpB+FgFVie0L5rKC2GwChhJTN81m BLFFBLQkdpw8CbZDWMBD4uXpLWA1vAL2EvPv3QDr5RQIlpj48g/Uhm9Au2dsBEvwC+hLXP37 CepAe4mZV84wQjQLSvyYfA+shhloweZtTawQtrzE5jVvmUFsIQF1iRt3d7NPYBSehaRlFpKW WUhaFjAyr2IUSS0tzk3PLTbSK07MLS7NS9dLzs/dxAiMpG3Hfm7Zwdj1LvgQowAHoxIP74zr EyKFWBPLiitzDzFKcDArifCWpU2MFOJNSaysSi3Kjy8qzUktPsRoCgyZicxSosn5wCjPK4k3 NDE0tzQ0MrawMDcyUhLnVb/cFCkkkJ5YkpqdmlqQWgTTx8TBKdXAOGeCV++lFX82ds18eSRC wNH75ZVZP7nb662S365duMnnKF+6wouSORmicad+mZ66vsTsQIbw59JfFbLH13l1z+l5m5h6 +jOj6wSDSyWlOdeq2Bcy7jq268q5rXbSKfuVVib9nLbN3m5tDMODxmeSm+JnlJp6lO7Syn7e uv3N3+vxE+qUrZf7FSuxFGckGmoxFxUnAgC84qqcugIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170814091004eucas1p166337d7bccb6701d76d3cb342fd24971 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUb?= =?UTF-8?B?7IK87ISx7KCE7J6QG1ByaW5jaXBhbCBFbmdpbmVlciwgU29mdHdhcmU=?= X-Global-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUbU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtQcmluY2lwYWwgRW5naW5lZXIsIFNvZnR3YXJl?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDA1Q0QwNTAwNTg=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170813214600epcas4p4764cb5399e27ff0e52a1936ecdf49346 X-RootMTR: 20170813214600epcas4p4764cb5399e27ff0e52a1936ecdf49346 References: <20170813161207.GA6530@chaz.gmail.com> <20170813194939.7a96bc4b@ntlworld.com> On Sun, 13 Aug 2017 14:45:12 -0700 Bart Schaefer wrote: > On Sun, Aug 13, 2017 at 11:49 AM, Peter Stephenson > wrote: > > > > +/* FDs saved for possible restoring, not needed in a subshell > > + * where we will never need to restore them. Hence if we enter > > + * a subshell these will simply be closed unconditionally. > > + * > > + * A value >= 10 indicates a valid saved fd. > > + */ > > No objection to defensive programming, but would it not be a bug for > an fd < 10 to ever be assigned to a slot in saved_fds[] in the first > place? Yes, it would --- I just need to exclude the case of 0 as that's the default (wasn't worth statically initialising to -1's), but checked the range instead. > It feels as though there's probably a reason that (int *save) is > passed around as a parameter to addfd() et al. rather than being a > global to begin with. Are you sure there aren't circumstances where > the same fd might get saved more than once at different levels of the > recursive execsomething() hierarchy, causing saved_fds[] to contain > incomplete information? I'm envisioning something like > > { { cmd1 ; cmd2 } > file2; cmd3 } > file1 & Yes, exactly that did occur to me later. We need to expose the entire hierarchy for this particular case, but that looks like a stack or a linked list, which seems a little heavyweight for this case. It needs a bit more thought. A linked list rooted at each fd 0 to 9 is the best I've come up with so far. pws