From f8b73ab97e90f5e4313b0e725fe14d1ee0df01b4 Mon Sep 17 00:00:00 2001 From: mlemesle <33993288+mlemesle@users.noreply.github.com> Date: Wed, 23 Feb 2022 22:11:46 +0100 Subject: [PATCH] fix(upgrade): move the file permission check to the beginning of the upgrade process (#13726) --- cli/tools/upgrade.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs index e9bafd9be8..e82d51a6e1 100644 --- a/cli/tools/upgrade.rs +++ b/cli/tools/upgrade.rs @@ -23,6 +23,13 @@ static ARCHIVE_NAME: Lazy = const RELEASE_URL: &str = "https://github.com/denoland/deno/releases"; pub async fn upgrade(upgrade_flags: UpgradeFlags) -> Result<(), AnyError> { + let old_exe_path = std::env::current_exe()?; + let permissions = fs::metadata(&old_exe_path)?.permissions(); + + if permissions.readonly() { + bail!("You do not have write permission to {:?}", old_exe_path); + } + let mut client_builder = Client::builder(); // If we have been provided a CA Certificate, add it into the HTTP client @@ -114,9 +121,7 @@ pub async fn upgrade(upgrade_flags: UpgradeFlags) -> Result<(), AnyError> { println!("Deno is upgrading to version {}", &install_version); - let old_exe_path = std::env::current_exe()?; let new_exe_path = unpack(archive_data, cfg!(windows))?; - let permissions = fs::metadata(&old_exe_path)?.permissions(); fs::set_permissions(&new_exe_path, permissions)?; check_exe(&new_exe_path)?;