Escape some symbols in external args (#1687)

* Escape some symbols in external args

* Don't escape on Windows, which does its own

* fix warning
This commit is contained in:
Jonathan Turner 2020-04-30 16:54:07 +12:00 committed by GitHub
parent cf53264438
commit 7d403a6cc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View File

@ -116,7 +116,23 @@ fn run_with_stdin(
let mut command_args = vec![];
for arg in command.args.iter() {
let value = evaluate_baseline_expr(arg, &context.registry, scope)?;
command_args.push(value.as_string()?.trim_end_matches('\n').to_string());
// Do the cleanup that we need to do on any argument going out:
let trimmed_value_string = value.as_string()?.trim_end_matches('\n').to_string();
let value_string;
#[cfg(not(windows))]
{
value_string = trimmed_value_string
.replace('$', "\\$")
.replace('"', "\\\"")
.to_string()
}
#[cfg(windows)]
{
value_string = trimmed_value_string
}
command_args.push(value_string);
}
let process_args = command_args

View File

@ -48,6 +48,20 @@ fn automatically_change_directory_with_trailing_slash_and_same_name_as_command()
})
}
// #[test]
// fn correctly_escape_external_arguments() {
// let actual = nu!(cwd: ".", r#"^echo '[{"foo": "bar"}]' | from-json | to-json"#);
// assert_eq!(actual, "{\"foo\":\"bar\"}");
// }
#[test]
fn correctly_escape_external_arguments() {
let actual = nu!(cwd: ".", r#"^echo '$0'"#);
assert_eq!(actual, "$0");
}
mod it_evaluation {
use super::nu;
use nu_test_support::fs::Stub::{EmptyFile, FileWithContent, FileWithContentToBeTrimmed};