diff --git a/src/engine/lua.cc b/src/engine/lua.cc index 5e01bcd0..9b037069 100644 --- a/src/engine/lua.cc +++ b/src/engine/lua.cc @@ -121,7 +121,7 @@ const char *Lua::blob_reader(lua_State *L, void *ud, size_t *size) { #endif -int Lua::run(Transaction *t, const std::string &str) { +int Lua::run(Transaction *t, const std::string &str) const { #ifdef WITH_LUA std::string luaRet; const char *a = NULL; @@ -138,10 +138,12 @@ int Lua::run(Transaction *t, const std::string &str) { luaL_setfuncs(L, mscLuaLib, 0); lua_setglobal(L, "m"); + LuaScriptBlob blob(m_blob); + #ifdef WITH_LUA_5_1 - int rc = lua_load(L, Lua::blob_reader, &m_blob, m_scriptName.c_str()); + int rc = lua_load(L, Lua::blob_reader, &blob, m_scriptName.c_str()); #else - int rc = lua_load(L, Lua::blob_reader, &m_blob, m_scriptName.c_str(), + int rc = lua_load(L, Lua::blob_reader, &blob, m_scriptName.c_str(), NULL); #endif if (rc != LUA_OK) { diff --git a/src/engine/lua.h b/src/engine/lua.h index 02882e84..ebc51c11 100644 --- a/src/engine/lua.h +++ b/src/engine/lua.h @@ -43,6 +43,14 @@ class LuaScriptBlob { } } + LuaScriptBlob(const LuaScriptBlob &other) : + m_data(NULL), + m_len(other.m_len) { + m_data = (unsigned char *)std::malloc(m_len); + // FIXME: m_data NULL? + std::memcpy(m_data, other.m_data, m_len); + } + void write(const void *data, size_t len) { unsigned char *d = (unsigned char *)realloc((unsigned char *)m_data, len + m_len); @@ -68,7 +76,7 @@ class Lua { Lua() { } bool load(const std::string &script, std::string *err); - int run(Transaction *t, const std::string &str=""); + int run(Transaction *t, const std::string &str="") const; static bool isCompatible(const std::string &script, Lua *l, std::string *error); #ifdef WITH_LUA diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index 2e2874f7..1e8f299c 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -46,8 +46,8 @@ functionStatic:headers/modsecurity/transaction.h:437 duplicateBranch:src/audit_log/audit_log.cc:223 unreadVariable:src/request_body_processor/multipart.cc:435 stlcstrParam:src/audit_log/writer/parallel.cc:145 -functionStatic:src/engine/lua.h:70 -functionStatic:src/engine/lua.h:71 +functionStatic:src/engine/lua.h:78 +functionStatic:src/engine/lua.h:79 functionConst:src/utils/geo_lookup.h:49 useInitializationList:src/operators/rbl.h:69 constStatement:test/common/modsecurity_test.cc:82