From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jilles Tjoelker Subject: Re: trap bug in recent versions of dash Date: Mon, 23 Aug 2010 00:32:27 +0200 Message-ID: <20100822223227.GA49760@stack.nl> References: <20100811080616.GA18303@wopr.local.invalid> <20100815200551.GA19150@stack.nl> <20100816115154.GB11790@wopr.local.invalid> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from relay04.stack.nl ([131.155.140.107]:52538 "EHLO mx1.stack.nl" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751311Ab0HVWc3 (ORCPT ); Sun, 22 Aug 2010 18:32:29 -0400 Received: from turtle.stack.nl (turtle.stack.nl [IPv6:2001:610:1108:5010::132]) by mx1.stack.nl (Postfix) with ESMTP id AAB561DD607 for ; Mon, 23 Aug 2010 00:32:27 +0200 (CEST) Content-Disposition: inline In-Reply-To: <20100816115154.GB11790@wopr.local.invalid> Sender: dash-owner@vger.kernel.org List-Id: dash@vger.kernel.org To: dash@vger.kernel.org On Mon, Aug 16, 2010 at 01:52:56PM +0200, Guido Berhoerster wrote: > * Jilles Tjoelker [2010-08-15 22:05]: > > On Wed, Aug 11, 2010 at 10:06:16AM +0200, Guido Berhoerster wrote: > > > with the latest git version of dash trap actions are not > > > evaluated in the context of a function. > > I think dotrap()'s return value should be removed or at least ignored. > > An "evalskip" (break/continue/return-function/return-file) should never > > lead to an immediate exit. I'm not supplying a patch because I am not > > entirely sure about the side effects this could have. > OK, I'm not familiar with the source but it'd be nice to have it > fixed before the next release since it is a regression breaking > scripts. If you want to try something, here is a patch. I have verified that the only change to the results of FreeBSD sh's testsuite is that the test builtins/break2.0 starts working (there are still 51 other broken tests). There is no change in output from the posh testsuite (run with -C sh,posix,no-typeset,no-arrays,no-coprocs,no-herestrings,no-history ). diff --git a/src/eval.c b/src/eval.c index d5e5c95..e484bec 100644 --- a/src/eval.c +++ b/src/eval.c @@ -307,9 +307,9 @@ setstatus: break; } out: - if ((checkexit & exitstatus) || - (pendingsigs && dotrap()) || - (flags & EV_EXIT)) + if (pendingsigs) + dotrap(); + if ((flags & EV_EXIT) || (checkexit & exitstatus)) exraise(EXEXIT); } -- Jilles Tjoelker