diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2023-03-25 14:22:05 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2023-03-25 14:22:05 +0100 |
| commit | c01ba4a3101e343464093603b12bb5327d8a320f (patch) | |
| tree | 9a88b807e6a10c6224888f959c5b2a36f9111c40 | |
| parent | 6d7511938a8864ccfa0a32d4884d9b92b0a37048 (diff) | |
| download | rust-c01ba4a3101e343464093603b12bb5327d8a320f.tar.gz rust-c01ba4a3101e343464093603b12bb5327d8a320f.zip | |
Reject symlinks in project-json
| -rw-r--r-- | crates/project-model/src/workspace.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs index d1e53e12eeb..2158485a330 100644 --- a/crates/project-model/src/workspace.rs +++ b/crates/project-model/src/workspace.rs @@ -4,7 +4,7 @@ use std::{collections::VecDeque, fmt, fs, process::Command, sync::Arc}; -use anyhow::{format_err, Context, Result}; +use anyhow::{bail, format_err, Context, Result}; use base_db::{ CrateDisplayName, CrateGraph, CrateId, CrateName, CrateOrigin, Dependency, Edition, Env, FileId, LangCrateOrigin, ProcMacroLoadResult, TargetLayoutLoadResult, @@ -154,6 +154,12 @@ impl ProjectWorkspace { ) -> Result<ProjectWorkspace> { let res = match manifest { ProjectManifest::ProjectJson(project_json) => { + let metadata = fs::symlink_metadata(&project_json).with_context(|| { + format!("Failed to read json file {}", project_json.display()) + })?; + if metadata.is_symlink() { + bail!("The project-json may not currently point to a symlink"); + } let file = fs::read_to_string(&project_json).with_context(|| { format!("Failed to read json file {}", project_json.display()) })?; |
