diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-11-25 16:38:39 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-11-25 16:38:39 +0000 |
commit | 3e32e48591025b0a1aae869b7c8dc697f06b738d (patch) | |
tree | 9a0e20cf97a143af70835a81c016c2247b0f3ec5 /src/libserver/re_cache.c | |
parent | 6eb16795cc5b97d7c6a03a9c112d7e23dc063eb9 (diff) | |
download | rspamd-3e32e48591025b0a1aae869b7c8dc697f06b738d.tar.gz rspamd-3e32e48591025b0a1aae869b7c8dc697f06b738d.zip |
[Feature] Support rspamd_text in selector regexps
Diffstat (limited to 'src/libserver/re_cache.c')
-rw-r--r-- | src/libserver/re_cache.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/libserver/re_cache.c b/src/libserver/re_cache.c index 40a44cde8..594b60b53 100644 --- a/src/libserver/re_cache.c +++ b/src/libserver/re_cache.c @@ -937,19 +937,24 @@ rspamd_re_cache_process_selector (struct rspamd_task *task, lua_tostring (L, -1)); } else { + struct rspamd_lua_text *txt; gsize slen; const gchar *sel_data; if (lua_type (L, -1) == LUA_TSTRING) { - sel_data = lua_tolstring (L, -1, &slen); - *n = 1; - *svec = g_malloc (sizeof (guchar *)); - *lenvec = g_malloc (sizeof (guint)); - (*svec)[0] = g_malloc (slen); - memcpy ((*svec)[0], sel_data, slen); - (*lenvec)[0] = slen; - - result = TRUE; + txt = lua_check_text_or_string (L, -1); + + if (txt) { + sel_data = txt->start; + slen = txt->len; + *n = 1; + *svec = g_malloc (sizeof (guchar *)); + *lenvec = g_malloc (sizeof (guint)); + (*svec)[0] = g_malloc (slen); + memcpy ((*svec)[0], sel_data, slen); + (*lenvec)[0] = slen; + result = TRUE; + } } else { *n = rspamd_lua_table_size (L, -1); @@ -961,7 +966,16 @@ rspamd_re_cache_process_selector (struct rspamd_task *task, for (guint i = 0; i < *n; i ++) { lua_rawgeti (L, -1, i + 1); - sel_data = lua_tolstring (L, -1, &slen); + txt = lua_check_text_or_string (L, -1); + if (txt) { + sel_data = txt->start; + slen = txt->len; + } + else { + sel_data = ""; + slen = 0; + } + (*svec)[i] = g_malloc (slen); memcpy ((*svec)[i], sel_data, slen); (*lenvec)[i] = slen; |