From 0ea3a735cac2c7b064e6294b6fcbd93abf450cc8 Mon Sep 17 00:00:00 2001 From: Niyaz Nigmatullin Date: Thu, 14 Jul 2022 23:32:55 +0300 Subject: [PATCH] readlink: symlink loop handling (#3717) readlink: fix symlink loop handling --- src/uu/readlink/src/readlink.rs | 3 ++- tests/by-util/test_readlink.rs | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/uu/readlink/src/readlink.rs b/src/uu/readlink/src/readlink.rs index 10d75e7ef..ceb4fceb4 100644 --- a/src/uu/readlink/src/readlink.rs +++ b/src/uu/readlink/src/readlink.rs @@ -84,7 +84,8 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { if verbose { return Err(USimpleError::new( 1, - format!("{}: errno {}", f.maybe_quote(), err.raw_os_error().unwrap()), + err.map_err_context(move || f.maybe_quote().to_string()) + .to_string(), )); } else { return Err(1.into()); diff --git a/tests/by-util/test_readlink.rs b/tests/by-util/test_readlink.rs index 25f29004f..acb08a21d 100644 --- a/tests/by-util/test_readlink.rs +++ b/tests/by-util/test_readlink.rs @@ -70,3 +70,13 @@ fn test_long_redirection_to_root() { println!("expect: {:?}", expect); assert_eq!(actual, expect); } + +#[test] +fn test_symlink_to_itself_verbose() { + let (at, mut ucmd) = at_and_ucmd!(); + at.relative_symlink_file("a", "a"); + ucmd.args(&["-ev", "a"]) + .fails() + .code_is(1) + .stderr_contains("Too many levels of symbolic links"); +}