From 642f966f1d350ab770215880b1acdea63cc057be Mon Sep 17 00:00:00 2001 From: Jon Magnuson Date: Fri, 19 Nov 2021 23:07:38 -0600 Subject: [PATCH] fsevent: return error on canonicalize failure Removes a panic that can occur in `append_path` when a file is removed after passing the `exists` check, but before canonicalization. This change moves `canonicalize` before appending the path, so that it can safely bail on error without leaking state. --- src/fsevent.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fsevent.rs b/src/fsevent.rs index a6bd6a9c..3232bb0a 100644 --- a/src/fsevent.rs +++ b/src/fsevent.rs @@ -347,6 +347,7 @@ impl FsEventWatcher { if !path.exists() { return Err(Error::path_not_found().add_path(path.into())); } + let canonical_path = path.to_path_buf().canonicalize()?; let str_path = path.to_str().unwrap(); unsafe { let mut err: cf::CFErrorRef = ptr::null_mut(); @@ -361,7 +362,7 @@ impl FsEventWatcher { cf::CFRelease(cf_path); } self.recursive_info.insert( - path.to_path_buf().canonicalize().unwrap(), + canonical_path, recursive_mode.is_recursive(), ); Ok(())