Skip to content

Commit

Permalink
comm: generate an error if the input is a directory
Browse files Browse the repository at this point in the history
tested by tests/misc/read-errors
  • Loading branch information
sylvestre committed Nov 16, 2024
1 parent 1d9e162 commit 7d1ac99
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/uu/comm/src/comm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// spell-checker:ignore (ToDO) delim mkdelim

use std::cmp::Ordering;
use std::fs::File;
use std::fs::{metadata, File};
use std::io::{self, stdin, BufRead, BufReader, Stdin};
use std::path::Path;
use uucore::error::{FromIo, UResult, USimpleError};
Expand Down Expand Up @@ -130,7 +130,11 @@ fn open_file(name: &str, line_ending: LineEnding) -> io::Result<LineReader> {
if name == "-" {
Ok(LineReader::new(Input::Stdin(stdin()), line_ending))
} else {
let f = File::open(Path::new(name))?;
let path = Path::new(name);
if metadata(path)?.is_dir() {
return Err(io::Error::new(io::ErrorKind::Other, "Is a directory"));
}
let f = File::open(path)?;
Ok(LineReader::new(
Input::FileIn(BufReader::new(f)),
line_ending,
Expand Down
33 changes: 33 additions & 0 deletions tests/by-util/test_comm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -292,3 +292,36 @@ fn test_no_such_file() {
.fails()
.stderr_only("comm: bogus_file_1: No such file or directory\n");
}

#[test]
fn test_is_dir() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;

scene
.ucmd()
.args(&[".", "."])
.fails()
.stderr_only("comm: .: Is a directory\n");
at.mkdir("dir");

scene
.ucmd()
.args(&["dir", "."])
.fails()
.stderr_only("comm: dir: Is a directory\n");

at.touch("file");
scene
.ucmd()
.args(&[".", "file"])
.fails()
.stderr_only("comm: .: Is a directory\n");

at.touch("file");
scene
.ucmd()
.args(&["file", "."])
.fails()
.stderr_only("comm: .: Is a directory\n");
}

0 comments on commit 7d1ac99

Please sign in to comment.