summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Peter <mail@david-peter.de>2021-07-12 20:03:31 +0200
committerDavid Peter <sharkdp@users.noreply.github.com>2021-07-12 23:17:30 +0200
commitbf2b2df9c9e218e35e5a38ce3d03cffb7c363956 (patch)
tree178e4c6bbd2a1a566b92e106ae0a380366064836
parent3617c98cf5de9996c29fe73bc7fc4126768497f3 (diff)
Fix for Windows: do not run binaries from CWD
This fixes a bug on Windows where `Command::new` would also run executables from the current working directory, possibly resulting in accidental runs of programs called `less`.
-rw-r--r--Cargo.lock29
-rw-r--r--Cargo.toml1
-rw-r--r--src/less.rs4
-rw-r--r--src/output.rs9
4 files changed, 41 insertions, 2 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a6d2d33f..6170e94c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,5 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
+version = 3
+
[[package]]
name = "adler"
version = "1.0.2"
@@ -97,6 +99,7 @@ dependencies = [
"error-chain",
"git2",
"globset",
+ "grep-cli",
"lazy_static",
"nix",
"path_abs",
@@ -488,6 +491,23 @@ dependencies = [
]
[[package]]
+name = "grep-cli"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dd110c34bb4460d0de5062413b773e385cbf8a85a63fc535590110a09e79e8a"
+dependencies = [
+ "atty",
+ "bstr",
+ "globset",
+ "lazy_static",
+ "log",
+ "regex",
+ "same-file",
+ "termcolor",
+ "winapi-util",
+]
+
+[[package]]
name = "hashbrown"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1144,6 +1164,15 @@ dependencies = [
]
[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
name = "terminal_size"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index 42a9f50f..e9b99b68 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -51,6 +51,7 @@ path_abs = { version = "0.5", default-features = false }
clircle = "0.3"
bugreport = "0.4"
dirs-next = { version = "2.0.0", optional = true }
+grep-cli = "0.1.6"
[dependencies.git2]
version = "0.13"
diff --git a/src/less.rs b/src/less.rs
index f1adca81..2575fe18 100644
--- a/src/less.rs
+++ b/src/less.rs
@@ -4,7 +4,9 @@ use std::ffi::OsStr;
use std::process::Command;
pub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<usize> {
- let cmd = Command::new(less_path).arg("--version").output().ok()?;
+ let resolved_path = grep_cli::resolve_binary(less_path.as_ref()).ok()?;
+
+ let cmd = Command::new(resolved_path).arg("--version").output().ok()?;
parse_less_version(&cmd.stdout)
}
diff --git a/src/output.rs b/src/output.rs
index 4aff7686..8bc2da0c 100644
--- a/src/output.rs
+++ b/src/output.rs
@@ -63,7 +63,14 @@ impl OutputType {
return Err(ErrorKind::InvalidPagerValueBat.into());
}
- let mut p = Command::new(&pager.bin);
+ let resolved_path = match grep_cli::resolve_binary(&pager.bin) {
+ Ok(path) => path,
+ Err(_) => {
+ return Ok(OutputType::stdout());
+ }
+ };
+
+ let mut p = Command::new(resolved_path);
let args = pager.args;
if pager.kind == PagerKind::Less {