ash: fix ifs cleanup on error paths
No binary (build failed)
—
(log yok)
| @@ -7028,6 +7028,7 @@ varunset(const char *end, const char *var, const char *umsg, int varflags) | |
| msg = umsg; | |
| } | |
| } | |
| + | ifsfree(); |
| ash_msg_and_raise_error("%.*s: %s%s", (int)(end - var - 1), var, msg, tail); | |
| } | |
| @@ -7453,6 +7454,7 @@ varvalue(char *name, int varflags, int flags, int quoted) | |
| if (discard) | |
| return -1; | |
| + | ifsfree(); |
| raise_error_syntax("bad substitution"); | |
| } | |
| @@ -0,0 +1,2 @@ | |
| + | ./heredoc_and_cmd.tests: line 4: D: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
| + | Y |
| @@ -0,0 +1,8 @@ | |
| + | # The bug was only happening with <<REDIR;CMD form below: |
| + | M='AAAAAAAAAAAAAAAAA' |
| + | fff(){ |
| + | date <<000; echo Y |
| + | ${D?$M$M$M$M$M$M} |
| + | 000 |
| + | } |
| + | fff |
| @@ -0,0 +1,2 @@ | |
| + | hush: D: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
| + | Y |
| @@ -0,0 +1,8 @@ | |
| + | # The bug was only happening with <<REDIR;CMD form below: |
| + | M='AAAAAAAAAAAAAAAAA' |
| + | fff(){ |
| + | date <<000; echo Y |
| + | ${D?$M$M$M$M$M$M} |
| + | 000 |
| + | } |
| + | fff |