← Commit list

4eb4141b2

Denys Vlasenko
Denys Vlasenko
2025-08-09
SUCCESS Duration: 177s

Subject

ash: eval: Always set exitstatus in evaltree

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

shell/ash.c+7 -6
@@ -9357,7 +9357,7 @@ evaltree(union node *n, int flags)
#endif
case NNOT:
status = !evaltree(n->nnot.com, EV_TESTED);
- goto setstatus;
+ break;
case NREDIR:
errlinno = lineno = n->nredir.linno;
expredir(n->nredir.redirect);
@@ -9368,7 +9368,7 @@ evaltree(union node *n, int flags)
}
if (n->nredir.redirect)
popredir(/*drop:*/ 0);
- goto setstatus;
+ break;
case NCMD:
evalfn = evalcommand;
checkexit:
@@ -9412,7 +9412,7 @@ evaltree(union node *n, int flags)
evalfn = evaltree;
calleval:
status = evalfn(n, flags);
- goto setstatus;
+ break;
}
case NIF:
status = evaltree(n->nif.test, EV_TESTED);
@@ -9426,17 +9426,18 @@ evaltree(union node *n, int flags)
goto evaln;
}
status = 0;
- goto setstatus;
+ break;
case NDEFUN:
defun(n);
/* Not necessary. To test it:
* "false; f() { qwerty; }; echo $?" should print 0.
*/
/* status = 0; */
- setstatus:
- exitstatus = status;
break;
}
+
+ exitstatus = status;
+
out:
/* Order of checks below is important:
* signal handlers trigger before exit caused by "set -e".