summary refs log tree commit diff
diff options
context:
space:
mode:
authorJilles Tjoelker <jilles@stack.nl>2010-05-27 20:07:29 +1000
committerHerbert Xu <herbert@gondor.apana.org.au>2010-05-27 20:07:29 +1000
commitf8231aea37e921492fc7fbd972385ab5b90e8627 (patch)
tree8f13116368a958a96f5493a3305c42aaad378dd3
parent[EVAL] Force fork if any trap is set, not just on EXIT (diff)
downloaddash-f8231aea37e921492fc7fbd972385ab5b90e8627.tar.gz
dash-f8231aea37e921492fc7fbd972385ab5b90e8627.zip
[EXPAND] Fix corruption of redirections with byte 0x81
In other ash variants, a partial implementation of ksh-like cmd >file*
adds and removes CTLESC bytes ('\x81') in redirection filenames,
preserving 8-bit transparency. Long ago, dash removed the code to add
the CTLESC bytes, but not the code to remove them, causing corruption of
filenames containing CTLESC. This commit removes the code to remove the
CTLESC bytes.

The CTLESC byte occurs frequently in UTF-8 encoded non-Latin text.

This bug has been reported various times to Ubuntu and Debian (e.g.
Launchpad Ubuntu #422298). This patch is the same as the one submitted
by Alexander Korolkov in Ubuntu #422298.

Signed-off-by: Jilles Tjoelker <jilles@stack.nl>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--ChangeLog1
-rw-r--r--src/expand.c2
2 files changed, 1 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 969d6be..164eb2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2010-05-27  Jilles Tjoelker <jilles@stack.nl>
 
 	* Force fork if any trap is set, not just on EXIT.
+	* Fix corruption of redirections with byte 0x81.
 
 2010-05-27  Herbert Xu <herbert@gondor.apana.org.au>
 
diff --git a/src/expand.c b/src/expand.c
index 48c45e5..f2f964c 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -210,8 +210,6 @@ expandarg(union node *arg, struct arglist *arglist, int flag)
 		exparg.lastp = &exparg.list;
 		expandmeta(exparg.list, flag);
 	} else {
-		if (flag & EXP_REDIR) /*XXX - for now, just remove escapes */
-			rmescapes(p);
 		sp = (struct strlist *)stalloc(sizeof (struct strlist));
 		sp->text = p;
 		*exparg.lastp = sp;