aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/re_cache.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-11-25 16:38:39 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-11-25 16:38:39 +0000
commit3e32e48591025b0a1aae869b7c8dc697f06b738d (patch)
tree9a0e20cf97a143af70835a81c016c2247b0f3ec5 /src/libserver/re_cache.c
parent6eb16795cc5b97d7c6a03a9c112d7e23dc063eb9 (diff)
downloadrspamd-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.c34
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;