From ca1b2e4c3983f94f25fa00ecfac78431e6ccd155 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 11 May 2022 22:06:09 +0100 Subject: [PATCH] [Fix] Distinguish dynamic and static items --- src/libserver/rspamd_symcache.h | 10 ++++++-- src/libserver/symcache/symcache_c.cxx | 33 +++++++++++++++++++++++++++ src/lua/lua_http.c | 3 ++- src/lua/lua_tcp.c | 2 +- src/lua/lua_udp.c | 3 ++- 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/libserver/rspamd_symcache.h b/src/libserver/rspamd_symcache.h index d1a9c41fe..99158fbc3 100644 --- a/src/libserver/rspamd_symcache.h +++ b/src/libserver/rspamd_symcache.h @@ -484,13 +484,19 @@ gboolean rspamd_symcache_is_item_allowed (struct rspamd_task *task, * @param item * @return */ -gint rspamd_symcache_item_flags (struct rspamd_symcache_item *item); +gint rspamd_symcache_dyn_item_flags (struct rspamd_task *task, + struct rspamd_symcache_dynamic_item *dyn_item); +gint rspamd_symcache_item_flags(struct rspamd_symcache_item *item); + /** * Returns cache item name * @param item * @return */ -const gchar* rspamd_symcache_item_name (struct rspamd_symcache_item *item); +const gchar* rspamd_symcache_dyn_item_name (struct rspamd_task *task, + struct rspamd_symcache_dynamic_item *dyn_item); +const gchar * rspamd_symcache_item_name(struct rspamd_symcache_item *item); + /** * Returns the current item stat * @param item diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx index f67078b62..fafc89d19 100644 --- a/src/libserver/symcache/symcache_c.cxx +++ b/src/libserver/symcache/symcache_c.cxx @@ -251,6 +251,39 @@ rspamd_symcache_item_flags(struct rspamd_symcache_item *item) return real_item->get_flags(); } + +const gchar* +rspamd_symcache_dyn_item_name (struct rspamd_task *task, + struct rspamd_symcache_dynamic_item *dyn_item) +{ + auto *cache_runtime = C_API_SYMCACHE_RUNTIME(task->symcache_runtime); + auto *real_dyn_item = C_API_SYMCACHE_DYN_ITEM(dyn_item); + + if (cache_runtime == nullptr || real_dyn_item == nullptr) { + return nullptr; + } + + auto static_item = cache_runtime->get_item_by_dynamic_item(real_dyn_item); + + return static_item->get_name().c_str(); +} + +gint +rspamd_symcache_item_flags(struct rspamd_task *task, + struct rspamd_symcache_dynamic_item *dyn_item) +{ + auto *cache_runtime = C_API_SYMCACHE_RUNTIME(task->symcache_runtime); + auto *real_dyn_item = C_API_SYMCACHE_DYN_ITEM(dyn_item); + + if (cache_runtime == nullptr || real_dyn_item == nullptr) { + return 0; + } + + auto static_item = cache_runtime->get_item_by_dynamic_item(real_dyn_item); + + return static_item->get_flags(); +} + guint rspamd_symcache_get_symbol_flags(struct rspamd_symcache *cache, const gchar *symbol) diff --git a/src/lua/lua_http.c b/src/lua/lua_http.c index 1d6c32798..1fb5732f8 100644 --- a/src/lua/lua_http.c +++ b/src/lua/lua_http.c @@ -446,7 +446,8 @@ lua_http_make_connection (struct lua_http_cbdata *cbd) if (cbd->item) { rspamd_session_add_event_full (cbd->session, (event_finalizer_t) lua_http_fin, cbd, - M, rspamd_symcache_item_name (cbd->item)); + M, + rspamd_symcache_dyn_item_name (cbd->task, cbd->item)); } else { rspamd_session_add_event (cbd->session, diff --git a/src/lua/lua_tcp.c b/src/lua/lua_tcp.c index 851e1511d..e1024ee36 100644 --- a/src/lua/lua_tcp.c +++ b/src/lua/lua_tcp.c @@ -1233,7 +1233,7 @@ lua_tcp_register_event (struct lua_tcp_cbdata *cbd) if (cbd->item) { cbd->async_ev = rspamd_session_add_event_full (cbd->session, fin, cbd, M, - rspamd_symcache_item_name (cbd->item)); + rspamd_symcache_dyn_item_name (cbd->task, cbd->item)); } else { cbd->async_ev = rspamd_session_add_event (cbd->session, fin, cbd, M); diff --git a/src/lua/lua_udp.c b/src/lua/lua_udp.c index b976f9adf..b9e283062 100644 --- a/src/lua/lua_udp.c +++ b/src/lua/lua_udp.c @@ -238,7 +238,8 @@ lua_udp_maybe_register_event (struct lua_udp_cbdata *cbd) if (cbd->s && !cbd->async_ev) { if (cbd->item) { cbd->async_ev = rspamd_session_add_event_full (cbd->s, lua_udp_cbd_fin, - cbd, M, rspamd_symcache_item_name (cbd->item)); + cbd, M, + rspamd_symcache_dyn_item_name (cbd->task, cbd->item)); } else { cbd->async_ev = rspamd_session_add_event (cbd->s, lua_udp_cbd_fin, -- 2.39.5