Get rid of a todo by stop declaring variable texec as static and instead zeroing
authoranton <anton@openbsd.org>
Mon, 18 Dec 2017 20:30:14 +0000 (20:30 +0000)
committeranton <anton@openbsd.org>
Mon, 18 Dec 2017 20:30:14 +0000 (20:30 +0000)
it out prior to continuing down the recursive call chain.

Initial diff from Michael W. Bombardieri, later tweaked; ok tb@

bin/ksh/exec.c

index 7cabcaa..054f8f3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: exec.c,v 1.68 2016/12/11 17:49:19 millert Exp $       */
+/*     $OpenBSD: exec.c,v 1.69 2017/12/18 20:30:14 anton Exp $ */
 
 /*
  * execute command tree
@@ -409,7 +409,7 @@ comexec(struct op *t, struct tbl *volatile tp, char **ap, volatile int flags,
        volatile int rv = 0;
        char *cp;
        char **lastp;
-       static struct op texec; /* Must be static (XXX but why?) */
+       struct op texec;
        int type_flags;
        int keepasn_ok;
        int fcflags = FC_BI|FC_FUNC|FC_PATH;
@@ -684,6 +684,7 @@ comexec(struct op *t, struct tbl *volatile tp, char **ap, volatile int flags,
                }
 
                /* to fork we set up a TEXEC node and call execute */
+               memset(&texec, 0, sizeof(texec));
                texec.type = TEXEC;
                texec.left = t; /* for tprint */
                texec.str = tp->val.s;