summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2016-09-11 13:27:08 -0400
committerAndrew Gallant <jamslam@gmail.com>2016-09-11 13:27:08 -0400
commitab91e4b8745d5cfacb6e560316ca90eb32d967ca (patch)
treefc97ef613b114761d51ccb1118cf532c2bc9b09a
parent2b943eda4754f3b191aaab0c4cdfc4238632f845 (diff)
Don't panic when an argument is invalid UTF-8.
Suggest a workaround.
-rw-r--r--src/args.rs15
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();