fixing nested expansions

This commit is contained in:
Théo Daron 2024-07-15 10:07:19 +02:00
parent c3eff3e370
commit 0e6144567c
2 changed files with 10 additions and 2 deletions

View File

@ -46,7 +46,7 @@ fn from(input: &'a str) -> Self {
let mut parts = Vec::new();
let mut escaped = String::with_capacity(input.len());
let mut inside_variable_expansion = false;
let mut nested_variable_expansion_count = 0;
let mut part_start = 0;
let mut unescaped_start = 0;
let mut end = 0;
@ -57,18 +57,25 @@ fn from(input: &'a str) -> Self {
//%sh{this "should" be escaped}
if let Some(t) = input.get(i + 1..i + 3) {
if t == "sh" {
nested_variable_expansion_count += 1;
inside_variable_expansion = true;
}
}
//%{this "should" be escaped}
if let Some(t) = input.get(i + 1..i + 2) {
if t == "{" {
nested_variable_expansion_count += 1;
inside_variable_expansion = true;
}
}
}
} 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 {

View File

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