ash: [EVAL] Avoid using undefined handler
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 30 Sep 2016 09:30:11 +0000 (11:30 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 30 Sep 2016 09:30:11 +0000 (11:30 +0200)
Upstream commit:

    Date: Fri, 8 Jul 2011 16:41:24 +0800
    [EVAL] Avoid using undefined handler

    * src/eval.c (evalbltin, evalfun): Set savehandler before calling
    setjmp with the possible "goto *done", where savehandler is used.
    Otherwise, clang warns that "Assigned value is garbage or undefined"
    at the point where "savehandler" is used on the RHS.

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index 3fe4714c241c3e1c5da28527e8d7730b5a25d77f..db943f6c78875041148679b345864c3a625098c9 100644 (file)
@@ -8944,12 +8944,12 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags)
 
        saveparam = shellparam;
        savelocalvars = localvars;
+       savehandler = exception_handler;
        e = setjmp(jmploc.loc);
        if (e) {
                goto funcdone;
        }
        INT_OFF;
-       savehandler = exception_handler;
        exception_handler = &jmploc;
        localvars = NULL;
        shellparam.malloced = 0;
@@ -9595,10 +9595,10 @@ evalbltin(const struct builtincmd *cmd, int argc, char **argv)
        int i;
 
        savecmdname = commandname;
+       savehandler = exception_handler;
        i = setjmp(jmploc.loc);
        if (i)
                goto cmddone;
-       savehandler = exception_handler;
        exception_handler = &jmploc;
        commandname = argv[0];
        argptr = argv + 1;