From 048f5f048456b4537b1067273b89d5192c65fb21 Mon Sep 17 00:00:00 2001 From: Jokler Date: Tue, 13 Feb 2018 15:35:03 +0100 Subject: Add some sandboxing --- src/plugins/factoids/mod.rs | 6 +++--- src/plugins/factoids/sandbox.lua | 28 +++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 4 deletions(-) (limited to 'src/plugins/factoids') diff --git a/src/plugins/factoids/mod.rs b/src/plugins/factoids/mod.rs index aeb83b0..d67416f 100644 --- a/src/plugins/factoids/mod.rs +++ b/src/plugins/factoids/mod.rs @@ -201,7 +201,7 @@ impl Factoids { factoid }; - server.send_privmsg(&command.target, &value) + server.send_privmsg(&command.target, &value.replace("\n", "|").replace("\r", "")) } } @@ -221,7 +221,7 @@ impl Factoids { let lua = Lua::new(); let globals = lua.globals(); - globals.set("factoid", lua.load(code, Some(name))?)?; + globals.set("factoid", code)?; globals.set("args", args)?; globals.set("input", command.tokens.join(" "))?; globals.set("user", command.source.clone())?; @@ -231,7 +231,7 @@ impl Factoids { lua.exec::<()>(LUA_SANDBOX, Some(name))?; let output: Vec = globals.get::<_, Vec>("output")?; - Ok(output.join("|").replace("\n", "|")) + Ok(output.join("|")) } fn invalid_command(&self, server: &IrcServer, command: &PluginCommand) -> Result<(), IrcError> { diff --git a/src/plugins/factoids/sandbox.lua b/src/plugins/factoids/sandbox.lua index 9b4f52e..4e6b53e 100644 --- a/src/plugins/factoids/sandbox.lua +++ b/src/plugins/factoids/sandbox.lua @@ -1 +1,27 @@ -factoid() +function send(text) + len = #output + if len < 1 then + output = { text } + else + output[len] = output[len] .. text + end +end + +function sendln(text) + sendtoirc(text) + table.insert(output, "") +end + +local env = { print = send, + println = sendln, + args = args, + input = input, + user = user, + channel = channel, + pairs = pairs, + table = table, + string = string, + tostring = tostring, + math = math } + +load(factoid, nil, nil, env)() -- cgit v1.2.3-70-g09d2