fixing nested expansions

pull/11164/head
Théo Daron 5 months ago
parent c3eff3e370
commit 0e6144567c

@ -46,7 +46,7 @@ impl<'a> From<&'a str> for Shellwords<'a> {
let mut parts = Vec::new(); let mut parts = Vec::new();
let mut escaped = String::with_capacity(input.len()); let mut escaped = String::with_capacity(input.len());
let mut inside_variable_expansion = false; let mut inside_variable_expansion = false;
let mut nested_variable_expansion_count = 0;
let mut part_start = 0; let mut part_start = 0;
let mut unescaped_start = 0; let mut unescaped_start = 0;
let mut end = 0; let mut end = 0;
@ -57,18 +57,25 @@ impl<'a> From<&'a str> for Shellwords<'a> {
//%sh{this "should" be escaped} //%sh{this "should" be escaped}
if let Some(t) = input.get(i + 1..i + 3) { if let Some(t) = input.get(i + 1..i + 3) {
if t == "sh" { if t == "sh" {
nested_variable_expansion_count += 1;
inside_variable_expansion = true; inside_variable_expansion = true;
} }
} }
//%{this "should" be escaped} //%{this "should" be escaped}
if let Some(t) = input.get(i + 1..i + 2) { if let Some(t) = input.get(i + 1..i + 2) {
if t == "{" { if t == "{" {
nested_variable_expansion_count += 1;
inside_variable_expansion = true; inside_variable_expansion = true;
} }
} }
} }
} else if c == '}' { } else if c == '}' {
inside_variable_expansion = false; nested_variable_expansion_count -= 1;
if nested_variable_expansion_count == 0 {
inside_variable_expansion = false;
}
} else if c == '{' {
nested_variable_expansion_count += 1;
} }
state = if !inside_variable_expansion { state = if !inside_variable_expansion {

@ -17,6 +17,7 @@ async fn test_variable_expansion() -> anyhow::Result<()> {
false, false,
) )
.await?; .await?;
let mut app = AppBuilder::new().build()?;
let mut app = AppBuilder::new().build()?; let mut app = AppBuilder::new().build()?;

Loading…
Cancel
Save