diff --git a/src/uu/base32/src/base_common.rs b/src/uu/base32/src/base_common.rs index 2112a40ea..68c40287d 100644 --- a/src/uu/base32/src/base_common.rs +++ b/src/uu/base32/src/base_common.rs @@ -6,7 +6,7 @@ use std::io::{stdout, Read, Write}; use uucore::display::Quotable; -use uucore::encoding::{wrap_print, Data, Format}; +use uucore::encoding::{wrap_print, Data, EncodeError, Format}; use uucore::error::{FromIo, UResult, USimpleError, UUsageError}; use uucore::format_usage; @@ -174,6 +174,7 @@ pub fn handle_input( wrap_print(&data, &s); Ok(()) } + Err(EncodeError::InvalidInput) => Err(USimpleError::new(1, "error: invalid input")), Err(_) => Err(USimpleError::new( 1, "error: invalid input (length must be multiple of 4 characters)", diff --git a/src/uucore/src/lib/features/encoding.rs b/src/uucore/src/lib/features/encoding.rs index 14fdbb38e..db218d5f0 100644 --- a/src/uucore/src/lib/features/encoding.rs +++ b/src/uucore/src/lib/features/encoding.rs @@ -27,6 +27,7 @@ pub enum DecodeError { pub enum EncodeError { Z85InputLenNotMultipleOf4, + InvalidInput, } pub type DecodeResult = Result, DecodeError>; @@ -148,8 +149,10 @@ impl Data { pub fn encode(&mut self) -> Result { let mut buf: Vec = vec![]; - self.input.read_to_end(&mut buf).unwrap(); - encode(self.format, buf.as_slice()) + match self.input.read_to_end(&mut buf) { + Ok(_) => encode(self.format, buf.as_slice()), + Err(_) => Err(EncodeError::InvalidInput), + } } } diff --git a/tests/by-util/test_basenc.rs b/tests/by-util/test_basenc.rs index 6c71b63f7..13a896703 100644 --- a/tests/by-util/test_basenc.rs +++ b/tests/by-util/test_basenc.rs @@ -18,3 +18,16 @@ fn test_z85_not_padded() { .fails() .stderr_only("basenc: error: invalid input (length must be multiple of 4 characters)\n"); } + +#[test] +fn test_invalid_input() { + let error_message = if cfg!(windows) { + "basenc: .: Permission denied" + } else { + "basenc: error: invalid input\n" + }; + new_ucmd!() + .args(&["--base32", "."]) + .fails() + .stderr_only(error_message); +}