degesch: Lua: allow simulating user input
Also added UTF-8 validation to buffer:log() while I'm at it.
This commit is contained in:
parent
331d1842b9
commit
56858a97dd
24
degesch.c
24
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 }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user