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();
|
||||
}
|
||||
|
||||
if (newsyn == ARISYNTAX && subtype > VSNORMAL)
|
||||
if (newsyn == ARISYNTAX)
|
||||
newsyn = DQSYNTAX;
|
||||
|
||||
if (newsyn != synstack->syntax) {
|
||||
if ((newsyn != synstack->syntax || synstack->innerdq)
|
||||
&& subtype != VSNORMAL
|
||||
) {
|
||||
synstack_push(&synstack,
|
||||
synstack->prev ?: alloca(sizeof(*synstack)),
|
||||
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