From 72811e307d07c8e5902a7f73ea6491eabb93a4ce Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Thu, 26 Nov 2009 11:55:22 +0800 Subject: [BUILTIN] Fix off-by-one recordregion in readcmd Alexey Gladkov 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 --- src/miscbltin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') 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; -- cgit 1.4.1