From 75fc371f3627fa70ae79b2e82f12095f24ee536f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 6 Jul 2021 16:08:19 +0200 Subject: [PATCH] Ensure returned URLs are files before returning them in path prompts --- gpui/src/platform/mac/platform.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/gpui/src/platform/mac/platform.rs b/gpui/src/platform/mac/platform.rs index 7e973ceacf7389c69be356ecd9a47b4e2d15f04b..dffa2c4a6abb8ac92163a04eeacaae30f1f8f5b9 100644 --- a/gpui/src/platform/mac/platform.rs +++ b/gpui/src/platform/mac/platform.rs @@ -7,7 +7,7 @@ use cocoa::{ NSEventModifierFlags, NSMenu, NSMenuItem, NSModalResponse, NSOpenPanel, NSPasteboard, NSPasteboardTypeString, NSSavePanel, NSWindow, }, - base::{id, nil, selector}, + base::{id, nil, selector, YES}, foundation::{NSArray, NSAutoreleasePool, NSData, NSInteger, NSString, NSURL}, }; use ctor::ctor; @@ -283,10 +283,12 @@ impl platform::Platform for MacPlatform { let urls = panel.URLs(); for i in 0..urls.count() { let url = urls.objectAtIndex(i); - let path = std::ffi::CStr::from_ptr(url.path().UTF8String()) - .to_string_lossy() - .to_string(); - result.push(PathBuf::from(path)); + if url.isFileURL() == YES { + let path = std::ffi::CStr::from_ptr(url.path().UTF8String()) + .to_string_lossy() + .to_string(); + result.push(PathBuf::from(path)); + } } Some(result) } else { @@ -317,10 +319,14 @@ impl platform::Platform for MacPlatform { let block = ConcreteBlock::new(move |response: NSModalResponse| { let result = if response == NSModalResponse::NSModalResponseOk { let url = panel.URL(); - let path = std::ffi::CStr::from_ptr(url.path().UTF8String()) - .to_string_lossy() - .to_string(); - Some(PathBuf::from(path)) + if url.isFileURL() == YES { + let path = std::ffi::CStr::from_ptr(url.path().UTF8String()) + .to_string_lossy() + .to_string(); + Some(PathBuf::from(path)) + } else { + None + } } else { None };