尽快推进:收紧PythonPlugin禁用边界
结论:对齐LinuxCNC src/emc/pythonplugin/python_plugin.cc initialize() 负状态语义,WASM安全shim在Python不可用时返回PLUGIN_PYTHON_NOT_INITIALIZED并保持负状态短路;未实现Python/remap执行,未扩展smoke parser。
This commit is contained in:
@@ -42,8 +42,7 @@ int PythonPlugin::configure(const char *iniFilename, const char *section) {
|
||||
}
|
||||
std::fclose(file);
|
||||
|
||||
status = PLUGIN_OK;
|
||||
return status;
|
||||
return initialize();
|
||||
}
|
||||
|
||||
bool PythonPlugin::is_callable(const char *, const char *) {
|
||||
@@ -86,6 +85,10 @@ int PythonPlugin::call_method(boost::python::object, boost::python::object &retv
|
||||
}
|
||||
|
||||
int PythonPlugin::initialize() {
|
||||
status = PLUGIN_OK;
|
||||
// LinuxCNC source basis: src/emc/pythonplugin/python_plugin.cc sets
|
||||
// PLUGIN_PYTHON_NOT_INITIALIZED when initialize() runs without an active
|
||||
// Python runtime. Browser-safe probes keep Python execution disabled.
|
||||
error_msg = "python disabled in wasm-safe probe";
|
||||
status = PLUGIN_PYTHON_NOT_INITIALIZED;
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "pythonplugin/python_plugin.hh"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
// LinuxCNC source basis: src/emc/pythonplugin/python_plugin.cc and
|
||||
// python_plugin.hh define the PythonPlugin API exercised by this link probe.
|
||||
int main() {
|
||||
@@ -26,6 +28,29 @@ int main() {
|
||||
if (plugin->run_string("noop", retval, false) != PLUGIN_OK) {
|
||||
return 3;
|
||||
}
|
||||
const char *ini = "/tmp/cnc_sim_python_plugin_probe.ini";
|
||||
{
|
||||
FILE *file = std::fopen(ini, "w");
|
||||
if (!file) {
|
||||
return 16;
|
||||
}
|
||||
std::fputs("[PYTHON]\n", file);
|
||||
std::fclose(file);
|
||||
}
|
||||
if (plugin->configure(ini, "PYTHON") != PLUGIN_PYTHON_NOT_INITIALIZED) {
|
||||
std::remove(ini);
|
||||
return 17;
|
||||
}
|
||||
std::remove(ini);
|
||||
if (plugin->call(nullptr, "noop", boost::python::object(), boost::python::object(), retval) != PLUGIN_PYTHON_NOT_INITIALIZED) {
|
||||
return 18;
|
||||
}
|
||||
if (plugin->call_method(boost::python::object(), retval) != PLUGIN_PYTHON_NOT_INITIALIZED) {
|
||||
return 19;
|
||||
}
|
||||
if (plugin->run_string("noop", retval, false) != PLUGIN_OK) {
|
||||
return 20;
|
||||
}
|
||||
if (plugin->call(nullptr, nullptr, boost::python::object(), boost::python::object(), retval) != PLUGIN_NO_CALLABLE) {
|
||||
return 8;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user