From: Pádraig Brady
Date: Sat, 9 Jan 2016 01:38:30 +0000 (+0000) Subject: wc: avoid ambiguous output with '\n' in file names X-Git-Tag: v8.25~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ed89ae9324026660dfefb5e482e91b8acc5262d;p=thirdparty%2Fcoreutils.git wc: avoid ambiguous output with '\n' in file names * src/wc.c (write_counts): Shell escape the file name if it contains '\n' so only a single line per file is output. * tests/misc/wc-files0.sh: Add a test case. * NEWS: Mention the improvement. --- diff --git a/NEWS b/NEWS index 1c214d5204..a57c4b36fd 100644 --- a/NEWS +++ b/NEWS @@ -94,6 +94,9 @@ GNU coreutils NEWS -*- outline -*- pseudo file systems "bpf_fs", "btrfs_test", "nsfs", "overlayfs" and "tracefs", and remote file system "acfs". + wc now ensures a single line per file for counts on standard output, + by quoting names containing '\n' characters; appropriate for use in a shell. + * Noteworthy changes in release 8.24 (2015-07-03) [stable] diff --git a/src/wc.c b/src/wc.c index c2a9c3fbe9..94cbaff9ad 100644 --- a/src/wc.c +++ b/src/wc.c @@ -182,7 +182,7 @@ write_counts (uintmax_t lines, printf (format_int, number_width, umaxtostr (linelength, buf)); } if (file) - printf (" %s", file); + printf (" %s", strchr (file, '\n') ? quotef (file) : file); putchar ('\n'); } diff --git a/tests/misc/wc-files0.sh b/tests/misc/wc-files0.sh index b6a204c1cc..4562e6a4ee 100755 --- a/tests/misc/wc-files0.sh +++ b/tests/misc/wc-files0.sh @@ -40,4 +40,12 @@ if test "$fail" = ''; then compare exp out || fail=1 fi +# Ensure file name containing new lines are output on a single line +nlname='1 +2' +touch "$nlname" || framework_failure_ +printf '%s\0' "$nlname" | wc --files0-from=- > out || fail=1 +printf '%s\n' "0 0 0 '1'$'\\n''2'" > exp || framework_failure_ +compare exp out || fail=1 + Exit $fail