按规划继续工作

结论:补充 INI 派生机器文件名的 OPFS 路径拒绝回归测试,确认非法遍历和嵌套路径不会进入主机存储,并通过 host/WASM/browser 聚合验证。
This commit is contained in:
2026-06-08 09:04:48 +08:00
parent e21f11d69f
commit 5bea38275f
4 changed files with 75 additions and 10 deletions

View File

@@ -209,6 +209,13 @@ const bridgeIniSdk = {
) {
return "custom.var";
}
if (
path === "/work/invalid-ini-file-session.ini" &&
section === "RS274NGC" &&
tag === "PARAMETER_FILE"
) {
return "../escape.var";
}
if (
path === "/work/ini-file-session.ini" &&
section === "EMCIO" &&
@@ -216,6 +223,13 @@ const bridgeIniSdk = {
) {
return "custom-tool.tbl";
}
if (
path === "/work/invalid-tool-file-session.ini" &&
section === "EMCIO" &&
tag === "TOOL_TABLE"
) {
return "nested/tool.tbl";
}
return null;
},
getBool(path, section, tag) {
@@ -416,6 +430,52 @@ assert.equal(
"tooldata_load=0\nload_tool_path=/work/ini-file-session-tool.tbl\nrandom_toolchanger=0\n",
);
await saveMachineTextFiles("invalid-ini-file-session", {
ini: [
"[EMC]",
"MACHINE = invalid-ini-file-session",
"",
"[RS274NGC]",
"PARAMETER_FILE = ../escape.var",
"",
].join("\n"),
}, { storage });
await assert.rejects(
() => loadMachineSessionFromOpfs(
bridgeInterp,
"invalid-ini-file-session",
{
storage,
iniSdk: bridgeIniSdk,
iniWasmPath: "/work/invalid-ini-file-session.ini",
},
),
/Invalid parameter filename/,
);
await saveMachineTextFiles("invalid-tool-file-session", {
ini: [
"[EMC]",
"MACHINE = invalid-tool-file-session",
"",
"[EMCIO]",
"TOOL_TABLE = nested/tool.tbl",
"",
].join("\n"),
}, { storage });
await assert.rejects(
() => loadMachineSessionFromOpfs(
bridgeInterp,
"invalid-tool-file-session",
{
storage,
iniSdk: bridgeIniSdk,
iniWasmPath: "/work/invalid-tool-file-session.ini",
},
),
/Invalid tool table filename/,
);
await assert.rejects(
() => loadTextFile("linuxcnc/machines/missing.ini", storage),
/missing file/,