summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-11-26 11:55:22 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2009-11-26 11:55:22 +0800
commit72811e307d07c8e5902a7f73ea6491eabb93a4ce (patch)
treec3ef82b76504bd0862d91db7484ec7008bb3c156 /src
parent[PARSER] Fix syntax array size (diff)
downloaddash-72811e307d07c8e5902a7f73ea6491eabb93a4ce.tar.gz
dash-72811e307d07c8e5902a7f73ea6491eabb93a4ce.zip
[BUILTIN] Fix off-by-one recordregion in readcmd
Alexey Gladkov <gladkov.alexey@gmail.com> wrote:
>
> I found another example:
>
> $ tr -d '[:print:]' < /etc/passwd |tr -d '\t\n' |wc -c
> 0
>
> $ dash -c 'while read o p; do printf "[%s] [%s]\n" "$o" "$p"; done <
> /etc/passwd' |tr -d '[:print:]' |tr -d '[:space:]' |wc -c
> 61
>
> bug is not fixed yet :(

This bug is caused by an off-by-one error in the recordregion
call in readcmd.  It included the terminating NUL in the region
which causes ifsbreakup to include the string after it for scanning.

Setting the correct length fixes the problem.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src')
-rw-r--r--src/miscbltin.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/miscbltin.c b/src/miscbltin.c
index ec9872d..046f2f2 100644
--- a/src/miscbltin.c
+++ b/src/miscbltin.c
@@ -84,7 +84,7 @@ readcmd_handle_line(char *line, char **ap, size_t len)
 	backup = sstrdup(line);
 
 	arglist.lastp = &arglist.list;
-	recordregion(0, len, 0);
+	recordregion(0, len - 1, 0);
 	
 	ifsbreakup(s, &arglist);
 	*arglist.lastp = NULL;