ash: [EVAL] Check exit for eval NSUBSHELL
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Oct 2016 16:19:39 +0000 (18:19 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Oct 2016 16:19:39 +0000 (18:19 +0200)
Upstream commit:

    Date: Tue, 6 Jul 2010 17:50:37 +0800
    [PATCH 161/277] [EVAL] Check exit for eval NSUBSHELL

    Example:

    $ dash -c 'set -e; (false); echo here'
    here

    With this commit, dash exits 1 before echo.

    The bug was reported by Stefan Fritsch through
     http://bugs.debian.org/514863

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This was fixed differently in our tree:

    Date:   Fri Sep 16 19:04:02 2016 +0000
    ash: exit after subshell error when errexit option is set

    When "set -e" option is on, shell must exit when any command fails,
    including compound commands of the form (compound-list) executed in a
    subshell. Bash and dash shells have this behaviour.

    Also add a corresponding testcase.

Signed-off-by: Rostislav Skudnov <rostislav@tuxera.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index 79439bf3e401085d9bb54a65f0c6b19b87e8d506..9dcf809753cc644eecf5b1781f9dd68e0bd5f669 100644 (file)
@@ -8610,11 +8610,9 @@ evaltree(union node *n, int flags)
                evalfn = evalloop;
                goto calleval;
        case NSUBSHELL:
-               evalfn = evalsubshell;
-               goto checkexit;
        case NBACKGND:
                evalfn = evalsubshell;
-               goto calleval;
+               goto checkexit;
        case NPIPE:
                evalfn = evalpipe;
                goto checkexit;