diff options
author | jilles <jilles@FreeBSD.org> | 2010-12-16 23:28:20 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2010-12-16 23:28:20 +0000 |
commit | da5b058d1d7d4754b6f45b99d2eadbd1ff3778f8 (patch) | |
tree | 14c8f568ef702c3bf08f199f2fc2c743b7a379e8 /bin | |
parent | 8bce5df51898fc82ba0869633041d697295d14bf (diff) | |
download | FreeBSD-src-da5b058d1d7d4754b6f45b99d2eadbd1ff3778f8.zip FreeBSD-src-da5b058d1d7d4754b6f45b99d2eadbd1ff3778f8.tar.gz |
sh: Fix corruption of command substitutions with special chars after newline
The CTLESC byte to protect a special character was output before instead of
after a newline directly preceding the special character.
The special handling of newlines is because command substitutions discard
all trailing newlines.
Diffstat (limited to 'bin')
-rw-r--r-- | bin/sh/expand.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/bin/sh/expand.c b/bin/sh/expand.c index 1693a0b..354d5e9 100644 --- a/bin/sh/expand.c +++ b/bin/sh/expand.c @@ -499,8 +499,6 @@ expbackq(union node *cmd, int quoted, int flag) } lastc = *p++; if (lastc != '\0') { - if (quotes && syntax[(int)lastc] == CCTL) - STPUTC(CTLESC, dest); if (lastc == '\n') { nnl++; } else { @@ -508,6 +506,8 @@ expbackq(union node *cmd, int quoted, int flag) nnl--; STPUTC('\n', dest); } + if (quotes && syntax[(int)lastc] == CCTL) + STPUTC(CTLESC, dest); STPUTC(lastc, dest); } } |