From 917fdfb106724ec2440fc16d085033a0632098aa Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Wed, 8 Sep 2010 20:35:43 +0000 Subject: [PATCH] sh: Fix 'read' if all chars before the first IFS char are backslash-escaped. Backslash-escaped characters did not set the flag for a non-IFS character. MFC after: 2 weeks --- bin/sh/miscbltin.c | 1 + tools/regression/bin/sh/builtins/read4.0 | 10 ++++++++++ tools/regression/bin/sh/builtins/read4.0.stdout | 8 ++++++++ 3 files changed, 19 insertions(+) create mode 100644 tools/regression/bin/sh/builtins/read4.0 create mode 100644 tools/regression/bin/sh/builtins/read4.0.stdout diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c index cc525b8ccbd..d9ac8a309c9 100644 --- a/bin/sh/miscbltin.c +++ b/bin/sh/miscbltin.c @@ -174,6 +174,7 @@ readcmd(int argc __unused, char **argv __unused) continue; if (backslash) { backslash = 0; + startword = 0; if (c != '\n') STPUTC(c, p); continue; diff --git a/tools/regression/bin/sh/builtins/read4.0 b/tools/regression/bin/sh/builtins/read4.0 new file mode 100644 index 00000000000..7204a35aa0a --- /dev/null +++ b/tools/regression/bin/sh/builtins/read4.0 @@ -0,0 +1,10 @@ +# $FreeBSD$ + +printf '%s\n' '\a\ b c' | { read a b; printf '%s\n' "x${a}x${b}x"; } +printf '%s\n' '\a b\ c' | { read a b; printf '%s\n' "x${a}x${b}x"; } +printf '%s\n' '\a\:b:c' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; } +printf '%s\n' '\a:b\:c' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; } +printf '%s\n' '\\ a' | { read a b; printf '%s\n' "x${a}x${b}x"; } +printf '%s\n' '\\:a' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; } +printf '%s\n' '\\\ a' | { read a b; printf '%s\n' "x${a}x${b}x"; } +printf '%s\n' '\\\:a' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; } diff --git a/tools/regression/bin/sh/builtins/read4.0.stdout b/tools/regression/bin/sh/builtins/read4.0.stdout new file mode 100644 index 00000000000..a8747a46ffe --- /dev/null +++ b/tools/regression/bin/sh/builtins/read4.0.stdout @@ -0,0 +1,8 @@ +xa bxcx +xaxb cx +xa:bxcx +xaxb:cx +x\xax +x\xax +x\ axx +x\:axx