Skip to content

Commit

Permalink
Merge pull request #4888 from Ludmuterol/more-panic-4886
Browse files Browse the repository at this point in the history
fix(#4886) more: panics if file is not readable
  • Loading branch information
cakebaker authored May 24, 2023
2 parents b29f8b0 + 7cad501 commit 81e3b04
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/uu/more/src/more.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,17 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
if length > 1 {
buff.push_str(&MULTI_FILE_TOP_PROMPT.replace("{}", file.to_str().unwrap()));
}
let mut reader = BufReader::new(File::open(file).unwrap());
let opened_file = match File::open(file) {
Err(why) => {
terminal::disable_raw_mode().unwrap();
return Err(USimpleError::new(
1,
format!("cannot open {}: {}", file.quote(), why.kind()),
));
}
Ok(opened_file) => opened_file,
};
let mut reader = BufReader::new(opened_file);
reader.read_to_string(&mut buff).unwrap();
more(&buff, &mut stdout, next_file.copied(), &options)?;
buff.clear();
Expand Down
18 changes: 18 additions & 0 deletions tests/by-util/test_more.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,21 @@ fn test_more_dir_arg() {
.usage_error("'.' is a directory.");
}
}

#[test]
#[cfg(target_family = "unix")]
fn test_more_invalid_file_perms() {
use std::fs::{set_permissions, Permissions};
use std::os::unix::fs::PermissionsExt;

if std::io::stdout().is_terminal() {
let (at, mut ucmd) = at_and_ucmd!();
let permissions = Permissions::from_mode(0o244);
at.make_file("invalid-perms.txt");
set_permissions(at.plus("invalid-perms.txt"), permissions).unwrap();
ucmd.arg("invalid-perms.txt")
.fails()
.code_is(1)
.stderr_contains("permission denied");
}
}

0 comments on commit 81e3b04

Please sign in to comment.