in crates/figterm/src/inline/validate.rs [16:59]
fn validate_with_context<CwdStr, Cwd, HdStr, Hd, CtxStr, Ctx, E>(
command: &str,
cwd: Cwd,
home_dir: Hd,
ctx: Ctx,
) -> bool
where
CwdStr: AsRef<str>,
Cwd: FnOnce() -> Option<CwdStr>,
HdStr: AsRef<str>,
Hd: FnOnce() -> Option<HdStr>,
CtxStr: AsRef<str>,
Ctx: FnMut(&str) -> Result<Option<CtxStr>, E>,
{
let command = command.trim();
// Currently the api responds with redactions of `XXX` if there is PII identified, just filter
// these to improve quality
if command.contains("XXX") {
return false;
}
// Try to validate the args to "cd",
if let Some(args) = shlex::split(command) {
if args.first().map(|s| s.as_str()) == Some("cd") && args.len() == 2 {
if let Some(arg) = args.get(1) {
if let Ok(arg) = shellexpand::full_with_context(arg, home_dir, ctx) {
let path = Path::new(arg.as_ref());
if path.is_absolute() && !path.is_dir() {
return false;
}
let canonicalized = cwd().and_then(|cwd| Path::new(cwd.as_ref()).join(path).canonicalize().ok());
match canonicalized {
Some(p) if !p.is_dir() => return false,
Some(_) => {},
None => return false,
}
}
}
}
}
true
}