按源验证刀库DB参数拆分

源依据:LinuxCNC src/emc/tooldata/tooldata_db.cc 的 tooldata_db_init() 使用 strtok_r 原地拆分 progname_plus_args,再检查 argv[0] 是否可执行。

结论:wasm-safe tooldata runtime probe 增加多参数输入副作用断言,确认缺失 DB 程序返回失败前仍保留 LinuxCNC 的参数拆分边界,减少外部 tooldata DB 替换风险。

检查:./test-linuxcnc-wasm-tooldata-link.sh;./test-native.sh;./test-linuxcnc-source-link.sh。
This commit is contained in:
cnc
2026-06-06 13:03:48 +08:00
parent 23e67bb6cd
commit c75eec1057

View File

@@ -203,6 +203,19 @@ int main() {
if (separator == std::string::npos || missing_db_program_with_arg[separator] != 0) {
return 56;
}
char missing_db_program_with_args[] = "/tmp/cnc_tooldata_probe_missing_db_program alpha beta";
if (tooldata_db_init(missing_db_program_with_args, 0) != -1) {
return 83;
}
// LinuxCNC src/emc/tooldata/tooldata_db.cc tokenizes progname_plus_args
// in place with strtok_r() before checking whether argv[0] is executable.
if (missing_db_program_with_args[42] != 0 ||
missing_db_program_with_args[48] != 0 ||
std::strcmp(missing_db_program_with_args, "/tmp/cnc_tooldata_probe_missing_db_program") != 0 ||
std::strcmp(missing_db_program_with_args + 43, "alpha") != 0 ||
std::strcmp(missing_db_program_with_args + 49, "beta") != 0) {
return 84;
}
std::string missing_db_program_string = make_temp_path("cnc_tooldata_probe_missing_db_program");
std::vector<char> missing_db_program(
missing_db_program_string.begin(),