summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorEric Andersen2004-04-12 21:41:29 +0000
committerEric Andersen2004-04-12 21:41:29 +0000
commit99fcd168cc7d36e054bb29628b5eb023fc9f51b4 (patch)
tree0cb5961606795454bcd2aed65977d43d28ad5d77 /shell
parent238e354b586ca3f7b68e8baeab7444e523493a12 (diff)
downloadbusybox-99fcd168cc7d36e054bb29628b5eb023fc9f51b4.zip
busybox-99fcd168cc7d36e054bb29628b5eb023fc9f51b4.tar.gz
Wolfgang Denk writes:
He, there is a bug in HUSH's handling of "if" / "elif" commands: $ if true > then > echo 1 > elif > true > then > echo 2 > elif > true > then > echo 3 > else > echo 4 > fi 1 2 3 $ The same bug exists in all versions of HUSH from BB v0.60.x up to and including v1.00-pre9. The attached patch fixes this: $ if true > then > echo 1 > elif > true > then > echo 2 > elif > true > then > echo 3 > else > echo 4 > fi 1 $ Best regards, Wolfgang Denk
Diffstat (limited to 'shell')
-rw-r--r--shell/hush.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 8f4cc97..6d31cdc 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -1557,7 +1557,7 @@ static int run_list_real(struct pipe *pi)
if (rmode == RES_THEN || rmode == RES_ELSE) if_code = next_if_code;
if (rmode == RES_THEN && if_code) continue;
if (rmode == RES_ELSE && !if_code) continue;
- if (rmode == RES_ELIF && !if_code) continue;
+ if (rmode == RES_ELIF && !if_code) break;
if (rmode == RES_FOR && pi->num_progs) {
if (!list) {
/* if no variable values after "in" we skip "for" */