























@@ -41,6 +41,19 @@ const BUNDLED_TRUST_ROOT_ENV_KEYS = BUNDLED_TRUST_ROOT_ENV_LINES.map(
4141(line) => line.split("=")[0] ?? "",
4242);
434344+const WINDOWS_SHELL_TRUST_ROOT_ENV_KEYS = [
45+"ComSpec",
46+"COMSPEC",
47+"ProgramFiles",
48+"PROGRAMFILES",
49+"ProgramW6432",
50+"PROGRAMW6432",
51+"SystemRoot",
52+"SYSTEMROOT",
53+"windir",
54+"WINDIR",
55+] as const;
56+4457async function writeEnvFile(filePath: string, contents: string) {
4558await fs.mkdir(path.dirname(filePath), { recursive: true });
4659await fs.writeFile(filePath, contents, "utf8");
@@ -305,6 +318,34 @@ describe("loadDotEnv", () => {
305318});
306319});
307320321+it("blocks Windows shell trust-root vars from workspace .env", async () => {
322+await withIsolatedEnvAndCwd(async () => {
323+await withDotEnvFixture(async ({ cwdDir }) => {
324+await writeEnvFile(
325+path.join(cwdDir, ".env"),
326+[
327+"ComSpec=.\\evil-comspec",
328+"COMSPEC=.\\evil-comspec-upper",
329+"ProgramFiles=.\\evil-pfiles",
330+"PROGRAMFILES=.\\evil-pfiles-upper",
331+"ProgramW6432=.\\evil-pw6432",
332+"PROGRAMW6432=.\\evil-pw6432-upper",
333+"SystemRoot=.\\fake-root",
334+"SYSTEMROOT=.\\fake-root-upper",
335+"windir=.\\fake-windir",
336+"WINDIR=.\\fake-windir-upper",
337+].join("\n"),
338+);
339+340+clearEnv(WINDOWS_SHELL_TRUST_ROOT_ENV_KEYS);
341+342+loadWorkspaceDotEnvFile(path.join(cwdDir, ".env"), { quiet: true });
343+344+expectEnvUndefined(WINDOWS_SHELL_TRUST_ROOT_ENV_KEYS);
345+});
346+});
347+});
348+308349it("blocks path-override vars (OPENCLAW_AGENT_DIR, OPENCLAW_BUNDLED_PLUGINS_DIR, PI_CODING_AGENT_DIR, OPENCLAW_OAUTH_DIR) from workspace .env", async () => {
309350await withIsolatedEnvAndCwd(async () => {
310351await withDotEnvFixture(async ({ base, cwdDir }) => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。