summaryrefslogtreecommitdiff
path: root/libs/lua
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-08-09 04:07:23 +0200
committerRobin Gareus <robin@gareus.org>2017-08-10 02:25:49 +0200
commit0191a9c4c2749871887e3a2878a36afef90f832b (patch)
tree8e73f73ce8b2a986f8b5119b557932b28ce0d93f /libs/lua
parentcba622cdcecdba2fd88556c4364646c96f4451c6 (diff)
Centralize Lua sandboxing
Diffstat (limited to 'libs/lua')
-rw-r--r--libs/lua/lua/luastate.h1
-rw-r--r--libs/lua/luastate.cc9
2 files changed, 10 insertions, 0 deletions
diff --git a/libs/lua/lua/luastate.h b/libs/lua/lua/luastate.h
index 5a5c939c2a..cdc7f2b2bf 100644
--- a/libs/lua/lua/luastate.h
+++ b/libs/lua/lua/luastate.h
@@ -36,6 +36,7 @@ public:
void collect_garbage ();
void collect_garbage_step ();
void tweak_rt_gc ();
+ void sandbox (bool rt_safe = false);
sigc::signal<void,std::string> Print;
diff --git a/libs/lua/luastate.cc b/libs/lua/luastate.cc
index 8b704fbe6a..80ce41944c 100644
--- a/libs/lua/luastate.cc
+++ b/libs/lua/luastate.cc
@@ -89,6 +89,15 @@ LuaState::tweak_rt_gc () {
}
void
+LuaState::sandbox (bool rt_safe) {
+ do_command ("loadfile = nil dofile = nil require = nil dofile = nil package = nil debug = nil os.exit = nil os.setlocale = nil rawget = nil rawset = nil coroutine = nil module = nil");
+ if (rt_safe) {
+ do_command ("os = nil io = nil");
+ }
+}
+
+
+void
LuaState::print (std::string text) {
Print (text); /* EMIT SIGNAL */
}