From c75eec105793d0739a70756169fe4ef8ef388008 Mon Sep 17 00:00:00 2001 From: cnc Date: Sat, 6 Jun 2026 13:03:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E6=BA=90=E9=AA=8C=E8=AF=81=E5=88=80?= =?UTF-8?q?=E5=BA=93DB=E5=8F=82=E6=95=B0=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 源依据: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。 --- core/wasm_shims/tooldata/tooldata_probe_main.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/wasm_shims/tooldata/tooldata_probe_main.cc b/core/wasm_shims/tooldata/tooldata_probe_main.cc index d5a61b4..4d65406 100644 --- a/core/wasm_shims/tooldata/tooldata_probe_main.cc +++ b/core/wasm_shims/tooldata/tooldata_probe_main.cc @@ -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 missing_db_program( missing_db_program_string.begin(),