Commit 1cf899e1 authored by salix5's avatar salix5 Committed by GitHub

disable non-text load_script (#796)

* use text mode in luaL_loadbufferx

* Add enable_unsafe_feature flag
parent 3d8b79df
...@@ -14,7 +14,8 @@ ...@@ -14,7 +14,8 @@
#include "ocgapi.h" #include "ocgapi.h"
#include "interpreter.h" #include "interpreter.h"
interpreter::interpreter(duel* pd, bool enable_unsafe_libraries) : coroutines(256), pduel(pd) { interpreter::interpreter(duel* pd, bool enable_unsafe_libraries)
: coroutines(256), pduel(pd), enable_unsafe_feature(enable_unsafe_libraries) {
lua_state = luaL_newstate(); lua_state = luaL_newstate();
current_state = lua_state; current_state = lua_state;
std::memcpy(lua_getextraspace(lua_state), &pd, LUA_EXTRASPACE); //set_duel_info std::memcpy(lua_getextraspace(lua_state), &pd, LUA_EXTRASPACE); //set_duel_info
...@@ -139,7 +140,11 @@ int32_t interpreter::load_script(const char* script_name) { ...@@ -139,7 +140,11 @@ int32_t interpreter::load_script(const char* script_name) {
return OPERATION_FAIL; return OPERATION_FAIL;
++no_action; ++no_action;
luaL_checkstack(current_state, 2, nullptr); luaL_checkstack(current_state, 2, nullptr);
int32_t error = luaL_loadbuffer(current_state, (const char*)buffer, len, script_name) || lua_pcall(current_state, 0, 0, 0); int32_t error = 0;
if (enable_unsafe_feature)
error = luaL_loadbuffer(current_state, (const char*)buffer, len, script_name) || lua_pcall(current_state, 0, 0, 0);
else
error = luaL_loadbufferx(current_state, (const char*)buffer, len, script_name, "t") || lua_pcall(current_state, 0, 0, 0);
if (error) { if (error) {
interpreter::sprintf(pduel->strbuffer, "%s", lua_tostring(current_state, -1)); interpreter::sprintf(pduel->strbuffer, "%s", lua_tostring(current_state, -1));
handle_message(pduel, 1); handle_message(pduel, 1);
......
...@@ -52,6 +52,7 @@ public: ...@@ -52,6 +52,7 @@ public:
coroutine_map coroutines; coroutine_map coroutines;
int32_t no_action{}; int32_t no_action{};
int32_t call_depth{}; int32_t call_depth{};
bool enable_unsafe_feature{};
explicit interpreter(duel* pd, bool enable_unsafe_libraries); explicit interpreter(duel* pd, bool enable_unsafe_libraries);
~interpreter(); ~interpreter();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment