mirror of
https://github.com/uutils/coreutils
synced 2024-11-16 09:48:03 +00:00
sort: fix panic on write to closed pipe
If the output of sort is piped to another program that closes the file descriptor, sort currently panics. The GNU coreutils is able to handle this case. Replacing panic with crash_if_err reports the closed pipe and exits with a return code, which seems like the correct behavior. Tested on my Mac and the panic disappears. Add a test which pipes data to sort - it won't protect against this specific regression, but it increases the test coverage, at least. Fixes #1608.
This commit is contained in:
parent
f5dce475c5
commit
7fc1b16115
2 changed files with 14 additions and 4 deletions
|
@ -550,10 +550,7 @@ where
|
|||
|
||||
for line in iter {
|
||||
let str = format!("{}\n", line);
|
||||
if let Err(e) = file.write_all(str.as_bytes()) {
|
||||
show_error!("sort: {0}", e.to_string());
|
||||
panic!("Write failed");
|
||||
}
|
||||
crash_if_err!(1, file.write_all(str.as_bytes()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -118,6 +118,19 @@ fn test_merge_reversed() {
|
|||
.stdout_only_fixture("merge_ints_reversed.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_pipe() {
|
||||
// TODO: issue 1608 reports a panic when we attempt to read from stdin,
|
||||
// which was closed by the other side of the pipe. This test does not
|
||||
// protect against regressions in that case; we should add one at some
|
||||
// point.
|
||||
new_ucmd!()
|
||||
.pipe_in("one\ntwo\nfour")
|
||||
.succeeds()
|
||||
.stdout_is("four\none\ntwo\n")
|
||||
.stderr_is("");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_check() {
|
||||
new_ucmd!()
|
||||
|
|
Loading…
Reference in a new issue