ash: parser: Fix parameter expansion inside inner double quotes
Upstream email: parser: Fix parameter expansion inside inner double quotes The parsing of parameter expansion inside inner double quotes breaks because we never look for ENDVAR while innerdq is true. echo "${x#"${x+''}"''} This patch fixes it by pushing the syntax stack if innerdq is true and we enter a new parameter expansion. This patch also fixes a corner case where a bad substitution error occurs within arithmetic expansion. Reported-by: Denys Vlasenko <vda.linux@googlemail.com> Fixes: ab1cecb40478 (" parser: Add syntax stack for recursive...") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> function old new delta readtoken1 2880 2898 +18 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
abf755615e
commit
f50e14632f
@ -12467,10 +12467,12 @@ parsesub: {
|
|||||||
pungetc();
|
pungetc();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newsyn == ARISYNTAX && subtype > VSNORMAL)
|
if (newsyn == ARISYNTAX)
|
||||||
newsyn = DQSYNTAX;
|
newsyn = DQSYNTAX;
|
||||||
|
|
||||||
if (newsyn != synstack->syntax) {
|
if ((newsyn != synstack->syntax || synstack->innerdq)
|
||||||
|
&& subtype != VSNORMAL
|
||||||
|
) {
|
||||||
synstack_push(&synstack,
|
synstack_push(&synstack,
|
||||||
synstack->prev ?: alloca(sizeof(*synstack)),
|
synstack->prev ?: alloca(sizeof(*synstack)),
|
||||||
newsyn);
|
newsyn);
|
||||||
|
2
shell/ash_test/ash-quoting/quote_in_varexp1.right
Normal file
2
shell/ash_test/ash-quoting/quote_in_varexp1.right
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
''
|
||||||
|
Ok:0
|
2
shell/ash_test/ash-quoting/quote_in_varexp1.tests
Executable file
2
shell/ash_test/ash-quoting/quote_in_varexp1.tests
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
x="''''"; echo "${x#"${x+''}"''}"
|
||||||
|
echo Ok:$?
|
Loading…
Reference in New Issue
Block a user