feat(sandbox): 编码原生命令行参数并明确隔离环境

This commit is contained in:
2026-09-08 22:51:38 +08:00
parent 71585486e2
commit dd92b15b9b
5 changed files with 330 additions and 7 deletions
@@ -3,6 +3,37 @@ use std::net::{SocketAddr, TcpStream, UdpSocket};
use std::time::Duration;
fn main() {
let args: Vec<_> = std::env::args().collect();
if args.get(1).is_some_and(|s| s == "launch") {
let expected = [
"launch",
"",
"space value",
"引号🦀",
"trailing\\",
"a\"b",
"slash\\\"quote",
"&|%PATH%",
"line\nbreak",
];
if args[1..] != expected {
std::process::exit(82);
}
let environment: std::collections::BTreeMap<_, _> = std::env::vars_os().collect();
let names: std::collections::BTreeSet<_> =
environment.keys().map(|k| k.to_str().unwrap()).collect();
if names
!= ["CUSTOM", "LOCALAPPDATA", "SYSTEMROOT", "TEMP", "TMP"]
.into_iter()
.collect()
|| std::env::var("CUSTOM").as_deref() != Ok("declared=值")
|| std::env::var_os("TEMP") != std::env::var_os("TMP")
|| std::path::PathBuf::from(std::env::var_os("LOCALAPPDATA").unwrap()).join("Temp")
!= std::path::PathBuf::from(std::env::var_os("TEMP").unwrap())
{
std::process::exit(83);
}
std::process::exit(0);
}
if args.len() != 3 {
std::process::exit(79);
}