diff options
author | Andrew Gallant <jamslam@gmail.com> | 2016-09-11 13:27:08 -0400 |
---|---|---|
committer | Andrew Gallant <jamslam@gmail.com> | 2016-09-11 13:27:08 -0400 |
commit | ab91e4b8745d5cfacb6e560316ca90eb32d967ca (patch) | |
tree | fc97ef613b114761d51ccb1118cf532c2bc9b09a | |
parent | 2b943eda4754f3b191aaab0c4cdfc4238632f845 (diff) |
Don't panic when an argument is invalid UTF-8.
Suggest a workaround.
-rw-r--r-- | src/args.rs | 15 |
1 files changed, 14 insertions, 1 deletions
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<Args> { + // 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(); |