From 10096d10430574ec608a40084dd2093be3a37e77 Mon Sep 17 00:00:00 2001 From: Ben S Date: Sat, 31 Jan 2015 17:18:53 +0000 Subject: [PATCH] Prevent crash for filenames with no components Now there are no more unwrap()s! --- src/file.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/file.rs b/src/file.rs index 0c0bb8a..63d50ec 100644 --- a/src/file.rs +++ b/src/file.rs @@ -45,8 +45,18 @@ impl<'a> File<'a> { /// Create a new File object from the given Stat result, and other data. pub fn with_stat(stat: io::FileStat, path: &Path, parent: Option<&'a Dir>) -> File<'a> { - let v = path.filename().unwrap_or_else(|| panic!("Failed to get filename for {:?}", path)); // fails if / or . or .. - let filename = String::from_utf8_lossy(v); + + // The filename to display is the last component of the path. However, + // the path has no components for `.`, `..`, and `/`, so in these + // cases, the entire path is used. + let bytes = match path.components().last() { + Some(b) => b, + None => path.as_vec(), + }; + + // Convert the string to UTF-8, replacing any invalid characters with + // replacement characters. + let filename = String::from_utf8_lossy(bytes); File { path: path.clone(),