From 71aa3255e6ef7c6d68367c3236e4cbd9c7ada59b Mon Sep 17 00:00:00 2001 From: "gcp-cherry-pick-bot[bot]" <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 14:36:39 -0600 Subject: [PATCH] Don't allow dropping files on remote projects (cherry-pick #11218) (#11225) Cherry-picked Don't allow dropping files on remote projects (#11218) Release Notes: - Fixed a panic when a remote participant dropped a local file on your project Co-authored-by: Conrad Irwin --- crates/project/src/project.rs | 12 +++++++----- crates/workspace/src/pane.rs | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 444393f17c204e08c6eeae4b432a5ba8a51b5874..f4eaed531225854815a8ab217e28ca415fe2966c 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -8457,11 +8457,13 @@ impl Project { OpenBuffer::Weak(_) => {} }, hash_map::Entry::Vacant(e) => { - assert!( - is_remote, - "received buffer update from {:?}", - envelope.original_sender_id - ); + if !is_remote { + debug_panic!( + "received buffer update from {:?}", + envelope.original_sender_id + ); + return Err(anyhow!("received buffer update for non-remote project")); + } e.insert(OpenBuffer::Operations(ops)); } } diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index c9027f2c9083a1970b5373261f7af4ae3b44dcd5..65fabe02cac491b9fbda4d7b9fe6edc7efae6ceb 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -1887,6 +1887,24 @@ impl Pane { let mut to_pane = cx.view().clone(); let mut split_direction = self.drag_split_direction; let paths = paths.paths().to_vec(); + let is_remote = self + .workspace + .update(cx, |workspace, cx| { + if workspace.project().read(cx).is_remote() { + workspace.show_error( + &anyhow::anyhow!("Cannot drop files on a remote project"), + cx, + ); + true + } else { + false + } + }) + .unwrap_or(true); + if is_remote { + return; + } + self.workspace .update(cx, |workspace, cx| { let fs = Arc::clone(workspace.project().read(cx).fs());