aboutsummaryrefslogtreecommitdiff
path: root/src/script/common
diff options
context:
space:
mode:
authorred-001 <red-001@outlook.ie>2017-06-30 19:14:39 +0100
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-06-30 20:14:39 +0200
commitf3ad75691aea30d2d68aab19fbfa9031409c39d7 (patch)
treeb73109f1d3d14af91b3593dc80645a1bb70274a8 /src/script/common
parent2e53801fc0d9ba13afec6c1ddb5e3999f68b96bd (diff)
downloadminetest-f3ad75691aea30d2d68aab19fbfa9031409c39d7.tar.gz
minetest-f3ad75691aea30d2d68aab19fbfa9031409c39d7.tar.bz2
minetest-f3ad75691aea30d2d68aab19fbfa9031409c39d7.zip
Create a filesystem abstraction layer for CSM and only allow accessing files that are scanned into it. (#5965)
* Load client-side mods into memory before executing them. This removes the remaining filesystem access that client-sided mods had and it will hopefully make then more secure. * Lua Virtual filesystem: don't load the files into memory just scan the filenames into memory. * Fix the issues with backtrace * fix most of the issues * fix code style. * add a comment
Diffstat (limited to 'src/script/common')
-rw-r--r--src/script/common/c_internal.cpp34
-rw-r--r--src/script/common/c_internal.h4
2 files changed, 5 insertions, 33 deletions
diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp
index b349f9dd1..0b388e383 100644
--- a/src/script/common/c_internal.cpp
+++ b/src/script/common/c_internal.cpp
@@ -24,37 +24,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
std::string script_get_backtrace(lua_State *L)
{
- std::string s;
- lua_getglobal(L, "debug");
- if(lua_istable(L, -1)){
- lua_getfield(L, -1, "traceback");
- if(lua_isfunction(L, -1)) {
- lua_call(L, 0, 1);
- if(lua_isstring(L, -1)){
- s = lua_tostring(L, -1);
- }
- }
- lua_pop(L, 1);
- }
- lua_pop(L, 1);
- return s;
-}
-
-int script_error_handler(lua_State *L) {
- lua_getglobal(L, "debug");
- if (!lua_istable(L, -1)) {
- lua_pop(L, 1);
- return 1;
- }
- lua_getfield(L, -1, "traceback");
- if (!lua_isfunction(L, -1)) {
- lua_pop(L, 2);
- return 1;
- }
- lua_pushvalue(L, 1);
- lua_pushinteger(L, 2);
- lua_call(L, 2, 1);
- return 1;
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_BACKTRACE);
+ lua_call(L, 0, 1);
+ return luaL_checkstring(L, -1);
}
int script_exception_wrapper(lua_State *L, lua_CFunction f)
diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h
index fc59b0e2e..b77f0a7c3 100644
--- a/src/script/common/c_internal.h
+++ b/src/script/common/c_internal.h
@@ -53,11 +53,11 @@ extern "C" {
#define CUSTOM_RIDX_SCRIPTAPI (CUSTOM_RIDX_BASE)
#define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1)
#define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2)
-#define CUSTOM_RIDX_ERROR_HANDLER (CUSTOM_RIDX_BASE + 3)
+#define CUSTOM_RIDX_BACKTRACE (CUSTOM_RIDX_BASE + 3)
// Pushes the error handler onto the stack and returns its index
#define PUSH_ERROR_HANDLER(L) \
- (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER), lua_gettop((L)))
+ (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_BACKTRACE), lua_gettop((L)))
#define PCALL_RESL(L, RES) do { \
int result_ = (RES); \