From a214ca60bdf03f450b342f24187e080b81ce340c Mon Sep 17 00:00:00 2001 From: Michael Debertol Date: Tue, 27 Jul 2021 15:49:38 +0200 Subject: [PATCH] sort: allow null bytes for -t --- src/uu/sort/src/sort.rs | 5 ++++- tests/by-util/test_sort.rs | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/uu/sort/src/sort.rs b/src/uu/sort/src/sort.rs index 91365b603..f779bca38 100644 --- a/src/uu/sort/src/sort.rs +++ b/src/uu/sort/src/sort.rs @@ -1065,7 +1065,10 @@ pub fn uumain(args: impl uucore::Args) -> i32 { if let Some(arg) = matches.args.get(options::SEPARATOR) { let separator = arg.vals[0].to_string_lossy(); - let separator = separator; + let mut separator = separator.as_ref(); + if separator == "\\0" { + separator = "\0"; + } if separator.len() != 1 { crash!(1, "separator must be exactly one character long"); } diff --git a/tests/by-util/test_sort.rs b/tests/by-util/test_sort.rs index 4a1cc3fa9..a9519e153 100644 --- a/tests/by-util/test_sort.rs +++ b/tests/by-util/test_sort.rs @@ -959,3 +959,12 @@ fn test_key_takes_one_arg() { .succeeds() .stdout_is_fixture("keys_open_ended.expected"); } + +#[test] +fn test_separator_null() { + new_ucmd!() + .args(&["-k1,1", "-k3,3", "-t", "\\0"]) + .pipe_in("z\0a\0b\nz\0b\0a\na\0z\0z\n") + .succeeds() + .stdout_only("a\0z\0z\nz\0b\0a\nz\0a\0b\n"); +}