From ab91e4b8745d5cfacb6e560316ca90eb32d967ca Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Sun, 11 Sep 2016 13:27:08 -0400 Subject: [PATCH] Don't panic when an argument is invalid UTF-8. Suggest a workaround. --- src/args.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/args.rs b/src/args.rs index b3d57ded..07c902c9 100644 --- a/src/args.rs +++ b/src/args.rs @@ -382,9 +382,22 @@ impl Args { /// /// Also, initialize a global logger. pub fn parse() -> Result { + // Get all of the arguments, being careful to require valid UTF-8. + let mut argv = vec![]; + for arg in env::args_os().skip(1) { + match arg.into_string() { + Ok(s) => argv.push(s), + Err(s) => { + errored!("Argument '{}' is not valid UTF-8. \ + Use hex escape sequences to match arbitrary \ + bytes in a pattern (e.g., \\xFF).", + s.to_string_lossy()); + } + } + } let raw: RawArgs = Docopt::new(USAGE) - .and_then(|d| d.version(Some(version())).decode()) + .and_then(|d| d.argv(argv).version(Some(version())).decode()) .unwrap_or_else(|e| e.exit()); let mut logb = env_logger::LogBuilder::new();