summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJokler <jokler.contact@gmail.com>2018-02-13 15:35:03 +0100
committerJokler <jokler.contact@gmail.com>2018-02-13 15:35:03 +0100
commit048f5f048456b4537b1067273b89d5192c65fb21 (patch)
tree94527759c080e1e0b6f28d4985c41562111e0dd0 /src
parent046a0114f0e23be258cbb6834c286153b758ecaf (diff)
downloadfrippy-048f5f048456b4537b1067273b89d5192c65fb21.tar.gz
frippy-048f5f048456b4537b1067273b89d5192c65fb21.zip
Add some sandboxing
Diffstat (limited to 'src')
-rw-r--r--src/plugins/factoids/mod.rs6
-rw-r--r--src/plugins/factoids/sandbox.lua28
2 files changed, 30 insertions, 4 deletions
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<T: Database> Factoids<T> {
factoid
};
- server.send_privmsg(&command.target, &value)
+ server.send_privmsg(&command.target, &value.replace("\n", "|").replace("\r", ""))
}
}
@@ -221,7 +221,7 @@ impl<T: Database> Factoids<T> {
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<T: Database> Factoids<T> {
lua.exec::<()>(LUA_SANDBOX, Some(name))?;
let output: Vec<String> = globals.get::<_, Vec<String>>("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)()