diff options
-rw-r--r-- | shell/ash.c | 6 | ||||
-rw-r--r-- | shell/ash_test/ash-quoting/quote_in_varexp1.right | 2 | ||||
-rwxr-xr-x | shell/ash_test/ash-quoting/quote_in_varexp1.tests | 2 |
3 files changed, 8 insertions, 2 deletions
diff --git a/shell/ash.c b/shell/ash.c index d82eba15f..ed1a4416c 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -12467,10 +12467,12 @@ parsesub: { | |||
12467 | pungetc(); | 12467 | pungetc(); |
12468 | } | 12468 | } |
12469 | 12469 | ||
12470 | if (newsyn == ARISYNTAX && subtype > VSNORMAL) | 12470 | if (newsyn == ARISYNTAX) |
12471 | newsyn = DQSYNTAX; | 12471 | newsyn = DQSYNTAX; |
12472 | 12472 | ||
12473 | if (newsyn != synstack->syntax) { | 12473 | if ((newsyn != synstack->syntax || synstack->innerdq) |
12474 | && subtype != VSNORMAL | ||
12475 | ) { | ||
12474 | synstack_push(&synstack, | 12476 | synstack_push(&synstack, |
12475 | synstack->prev ?: alloca(sizeof(*synstack)), | 12477 | synstack->prev ?: alloca(sizeof(*synstack)), |
12476 | newsyn); | 12478 | newsyn); |
diff --git a/shell/ash_test/ash-quoting/quote_in_varexp1.right b/shell/ash_test/ash-quoting/quote_in_varexp1.right new file mode 100644 index 000000000..99a0aea7c --- /dev/null +++ b/shell/ash_test/ash-quoting/quote_in_varexp1.right | |||
@@ -0,0 +1,2 @@ | |||
1 | '' | ||
2 | Ok:0 | ||
diff --git a/shell/ash_test/ash-quoting/quote_in_varexp1.tests b/shell/ash_test/ash-quoting/quote_in_varexp1.tests new file mode 100755 index 000000000..1b97b0556 --- /dev/null +++ b/shell/ash_test/ash-quoting/quote_in_varexp1.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | x="''''"; echo "${x#"${x+''}"''}" | ||
2 | echo Ok:$? | ||