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 d82eba1..ed1a441 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -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); 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 0000000..99a0aea --- /dev/null +++ b/shell/ash_test/ash-quoting/quote_in_varexp1.right @@ -0,0 +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 0000000..1b97b05 --- /dev/null +++ b/shell/ash_test/ash-quoting/quote_in_varexp1.tests @@ -0,0 +1,2 @@ +x="''''"; echo "${x#"${x+''}"''}" +echo Ok:$? |