diff options
Diffstat (limited to 'cli/standalone.rs')
-rw-r--r-- | cli/standalone.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/cli/standalone.rs b/cli/standalone.rs index 067fec36a..6559242bd 100644 --- a/cli/standalone.rs +++ b/cli/standalone.rs @@ -5,6 +5,7 @@ use crate::tokio_util; use crate::version; use crate::worker::MainWorker; use crate::worker::WorkerOptions; +use deno_core::error::bail; use deno_core::error::type_error; use deno_core::error::AnyError; use deno_core::futures::FutureExt; @@ -169,6 +170,24 @@ pub async fn create_standalone_binary( } else { output }; + + if output.exists() { + // If the output is a directory, throw error + if output.is_dir() { + bail!("Could not compile: {:?} is a directory.", &output); + } + + // Make sure we don't overwrite any file not created by Deno compiler. + // Check for magic trailer in last 16 bytes + let mut output_file = File::open(&output)?; + output_file.seek(SeekFrom::End(-16))?; + let mut trailer = [0; 16]; + output_file.read_exact(&mut trailer)?; + let (magic_trailer, _) = trailer.split_at(8); + if magic_trailer != MAGIC_TRAILER { + bail!("Could not compile: cannot overwrite {:?}.", &output); + } + } tokio::fs::write(&output, final_bin).await?; #[cfg(unix)] { |