Guard browser OPFS invalid session staging

This commit is contained in:
2026-06-13 22:57:09 +08:00
parent ff6dd315ee
commit a158fe22ee
2 changed files with 99 additions and 58 deletions

View File

@@ -4541,6 +4541,32 @@
);
}
async function verifyOpfsInvalidIniSessionRejects(label, interp, iniSdk, machineId, iniLines, expectedPattern) {
const machineTextPaths = await saveMachineTextFiles(machineId, {
ini: iniLines.join("\n"),
});
assertMachineTextStorePaths(`${label}_machine_text_files_staging`, machineTextPaths, machineId);
const sessionOptions = {
iniSdk,
iniWasmPath: `/work/${machineId}.ini`,
};
assertOpfsIniStaging(
`${label}_ini_staging`,
{
opfsPath: `linuxcnc/machines/${machineId}/machine.ini`,
wasmPath: sessionOptions.iniWasmPath,
},
`linuxcnc/machines/${machineId}/machine.ini`,
`/work/${machineId}.ini`,
);
await verifyRejects(
label,
() => loadMachineSessionFromOpfs(interp, machineId, sessionOptions),
expectedPattern,
);
}
function assertSimConfigStagingPlan(machineRel, plan, expectedWasmDir) {
if (plan.wasmDir !== expectedWasmDir) {
throw new Error(`${machineRel}: browser sim staging root drift`);
@@ -9657,79 +9683,35 @@
].join("\n"),
);
const invalidParamFileTextPaths = await saveMachineTextFiles("browser-invalid-param-file-session", {
ini: [
await verifyOpfsInvalidIniSessionRejects(
"opfs_reject_invalid_ini_parameter_file",
interp,
ini,
"browser-invalid-param-file-session",
[
"[EMC]",
"MACHINE = browser-invalid-param-file-session",
"",
"[RS274NGC]",
"PARAMETER_FILE = ../escape.var",
"",
].join("\n"),
});
assertMachineTextStorePaths(
"opfs_save_invalid_param_machine_text_files_staging",
invalidParamFileTextPaths,
"browser-invalid-param-file-session",
);
const invalidParamFileSessionOptions = {
iniSdk: ini,
iniWasmPath: "/work/browser-invalid-param-file-session.ini",
};
assertOpfsIniStaging(
"opfs_reject_invalid_ini_parameter_file_staging",
{
opfsPath: "linuxcnc/machines/browser-invalid-param-file-session/machine.ini",
wasmPath: invalidParamFileSessionOptions.iniWasmPath,
},
"linuxcnc/machines/browser-invalid-param-file-session/machine.ini",
"/work/browser-invalid-param-file-session.ini",
);
await verifyRejects(
"opfs_reject_invalid_ini_parameter_file",
() => loadMachineSessionFromOpfs(
interp,
"browser-invalid-param-file-session",
invalidParamFileSessionOptions,
),
],
/Invalid parameter filename/,
);
const invalidToolFileTextPaths = await saveMachineTextFiles("browser-invalid-tool-file-session", {
ini: [
await verifyOpfsInvalidIniSessionRejects(
"opfs_reject_invalid_ini_tool_table",
interp,
ini,
"browser-invalid-tool-file-session",
[
"[EMC]",
"MACHINE = browser-invalid-tool-file-session",
"",
"[EMCIO]",
"TOOL_TABLE = nested/tool.tbl",
"",
].join("\n"),
});
assertMachineTextStorePaths(
"opfs_save_invalid_tool_machine_text_files_staging",
invalidToolFileTextPaths,
"browser-invalid-tool-file-session",
);
const invalidToolFileSessionOptions = {
iniSdk: ini,
iniWasmPath: "/work/browser-invalid-tool-file-session.ini",
};
assertOpfsIniStaging(
"opfs_reject_invalid_ini_tool_table_staging",
{
opfsPath: "linuxcnc/machines/browser-invalid-tool-file-session/machine.ini",
wasmPath: invalidToolFileSessionOptions.iniWasmPath,
},
"linuxcnc/machines/browser-invalid-tool-file-session/machine.ini",
"/work/browser-invalid-tool-file-session.ini",
);
await verifyRejects(
"opfs_reject_invalid_ini_tool_table",
() => loadMachineSessionFromOpfs(
interp,
"browser-invalid-tool-file-session",
invalidToolFileSessionOptions,
),
],
/Invalid tool table filename/,
);