Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [bug] wrong exit status upon (e) flag fatal errors in if/while conditions
- X-seq: zsh-workers 48787
- From: Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Re: [bug] wrong exit status upon (e) flag fatal errors in if/while conditions
- Date: Wed, 5 May 2021 12:47:18 +0100 (BST)
- Archived-at: <https://zsh.org/workers/48787>
- Importance: Medium
- In-reply-to: <20210505110713.zmny7625vlmog6ir@chazelas.org>
- List-id: <zsh-workers.zsh.org>
- References: <20210505110713.zmny7625vlmog6ir@chazelas.org>
> On 05 May 2021 at 12:07 Stephane Chazelas <stephane@xxxxxxxxxxxx> wrote:
> $ a='${' zsh -c 'if : ${(e)a}; then echo x; fi; echo y'; echo $?
> zsh:1: bad substitution
> 0
> $ a='${' zsh -c 'if : ${(e)a}; then echo x; fi; echo y'; echo $?
> zsh:1: bad substitution
> 0
>
> That's when the (e) flag is used in the condition part of an
> "if" or "while" (not "until") statement at least.
>
> The shell aborts with an error message but with a success exit
> status.
I can do this one; it's quite obvious looking at the code, I think...
BTW this is somewhat obscurely cut and pasted, the actual commit
will come straight from the Linux machine, so don't worry about
any line endings here.
pws
diff --git a/Src/loop.c b/Src/loop.c
index 41b2e5627..aa733a2cb 100644
--- a/Src/loop.c
+++ b/Src/loop.c
@@ -583,7 +583,7 @@ execif(Estate state, int do_exec)
cmdpop();
} else {
noerrexit = olderrexit;
- if (!retflag)
+ if (!retflag && !errflag)
lastval = 0;
}
state->pc = end;
diff --git a/Test/A01grammar.ztst b/Test/A01grammar.ztst
index 35a04e7d5..88fc8606e 100644
--- a/Test/A01grammar.ztst
+++ b/Test/A01grammar.ztst
@@ -939,3 +939,8 @@ F:Note that the behaviour of 'exit' inside try-list inside a function is unspeci
$ZTST_testdir/../Src/zsh -fc '{ ( ) } always { echo foo }'
0:exec last command optimization inhibited for try/always
>foo
+
+ a='${'
+ if : ${(e)a}; then echo x; fi
+1:Status on bad substitution in if without else
+?(eval):2: bad substitution
Messages sorted by:
Reverse Date,
Date,
Thread,
Author