aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--degesch.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/degesch.c b/degesch.c
index d736a9c..fe503aa 100644
--- a/degesch.c
+++ b/degesch.c
@@ -7432,6 +7432,15 @@ lua_plugin_handle_string_filter_result (struct lua_plugin *self,
return true;
}
+static const char *
+lua_plugin_check_utf8 (lua_State *L, int arg)
+{
+ size_t len;
+ const char *s = luaL_checklstring (L, arg, &len);
+ luaL_argcheck (L, utf8_validate (s, len), 1, "must be valid UTF-8");
+ return s;
+}
+
static void
lua_plugin_log_error
(struct lua_plugin *self, const char *where, struct error *error)
@@ -7548,7 +7557,7 @@ lua_buffer_log (lua_State *L)
{
struct lua_buffer *wrapper = luaL_checkudata (L, 1, XLUA_BUFFER_METATABLE);
luaL_argcheck (L, wrapper->buffer, 1, "dead reference used");
- const char *message = luaL_checkstring (L, 2);
+ const char *message = lua_plugin_check_utf8 (L, 2);
struct buffer *buffer = wrapper->buffer;
log_full (wrapper->plugin->ctx, buffer->server, buffer,
@@ -7556,12 +7565,25 @@ lua_buffer_log (lua_State *L)
return 0;
}
+static int
+lua_buffer_execute (lua_State *L)
+{
+ struct lua_buffer *wrapper = luaL_checkudata (L, 1, XLUA_BUFFER_METATABLE);
+ luaL_argcheck (L, wrapper->buffer, 1, "dead reference used");
+ const char *line = lua_plugin_check_utf8 (L, 2);
+
+ struct buffer *buffer = wrapper->buffer;
+ process_input_utf8 (wrapper->plugin->ctx, buffer, line, 0);
+ return 0;
+}
+
static luaL_Reg lua_buffer_table[] =
{
// TODO: some useful methods or values
{ "__gc", lua_buffer_gc },
{ "get_server", lua_buffer_get_server },
{ "log", lua_buffer_log },
+ { "execute", lua_buffer_execute },
{ NULL, NULL }
};