]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Rework] Urls: update lua libraries
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 9 Mar 2020 10:45:26 +0000 (10:45 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 9 Mar 2020 10:46:11 +0000 (10:46 +0000)
src/libserver/url.c
src/lua/lua_task.c

index 39ea5acc2c31edfdffea1933aff73d68fdaf6e55..bae3ebd4fe9e6d1902c1e89feab3710c1d3aa726 100644 (file)
@@ -3122,7 +3122,7 @@ rspamd_url_text_part_callback (struct rspamd_url *url, gsize start_offset,
        struct rspamd_process_exception *ex;
        struct rspamd_task *task;
        gchar *url_str = NULL;
-       struct rspamd_url *query_url, *existing;
+       struct rspamd_url *query_url;
        gint rc;
        gboolean prefix_added;
 
index e8c3fc90d362095c308c034bfe591d0a2d0bf372..95e4c9fbdd5e6934b2cf5b4f6898d99eabb2b225 100644 (file)
@@ -2249,6 +2249,7 @@ lua_task_get_urls (lua_State * L)
        static const gint default_mask = PROTOCOL_HTTP|PROTOCOL_HTTPS|
                        PROTOCOL_FILE|PROTOCOL_FTP;
        const gchar *cache_name = "emails+urls";
+       struct rspamd_url *u;
        gboolean need_images = FALSE;
        gsize sz, max_urls = 0;
 
@@ -2336,8 +2337,7 @@ lua_task_get_urls (lua_State * L)
                                cache_name = "emails+urls";
                        }
 
-                       sz = g_hash_table_size (MESSAGE_FIELD (task, urls)) +
-                                       g_hash_table_size (MESSAGE_FIELD (task, emails));
+                       sz = kh_size (MESSAGE_FIELD (task, urls));
 
                        sz = lua_task_urls_adjust_skip_prob (task, &cb, sz, max_urls);
 
@@ -2345,20 +2345,17 @@ lua_task_get_urls (lua_State * L)
                                /* Can use cached version */
                                if (!lua_task_get_cached (L, task, cache_name)) {
                                        lua_createtable (L, sz, 0);
-                                       g_hash_table_foreach (MESSAGE_FIELD (task, urls),
-                                                       lua_tree_url_callback, &cb);
-                                       g_hash_table_foreach (MESSAGE_FIELD (task, emails),
-                                                       lua_tree_url_callback, &cb);
-
+                                       kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
+                                               lua_tree_url_callback (u, u, &cb);
+                                       });
                                        lua_task_set_cached (L, task, cache_name, -1);
                                }
                        }
                        else {
                                lua_createtable (L, sz, 0);
-                               g_hash_table_foreach (MESSAGE_FIELD (task, urls),
-                                               lua_tree_url_callback, &cb);
-                               g_hash_table_foreach (MESSAGE_FIELD (task, emails),
-                                               lua_tree_url_callback, &cb);
+                               kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
+                                       lua_tree_url_callback (u, u, &cb);
+                               });
                        }
 
                }
@@ -2370,21 +2367,27 @@ lua_task_get_urls (lua_State * L)
                                cache_name = "urls";
                        }
 
-                       sz = g_hash_table_size (MESSAGE_FIELD (task, urls));
+                       sz = kh_size (MESSAGE_FIELD (task, urls));
                        sz = lua_task_urls_adjust_skip_prob (task, &cb, sz, max_urls);
 
                        if (protocols_mask == (default_mask)) {
                                if (!lua_task_get_cached (L, task, cache_name)) {
                                        lua_createtable (L, sz, 0);
-                                       g_hash_table_foreach (MESSAGE_FIELD (task, urls),
-                                                       lua_tree_url_callback, &cb);
+                                       kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
+                                               if (!(u->protocol & PROTOCOL_MAILTO)) {
+                                                       lua_tree_url_callback (u, u, &cb);
+                                               }
+                                       });
                                        lua_task_set_cached (L, task, cache_name, -1);
                                }
                        }
                        else {
                                lua_createtable (L, sz, 0);
-                               g_hash_table_foreach (MESSAGE_FIELD (task, urls),
-                                               lua_tree_url_callback, &cb);
+                               kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
+                                       if (!(u->protocol & PROTOCOL_MAILTO)) {
+                                               lua_tree_url_callback (u, u, &cb);
+                                       }
+                               });
                        }
                }
        }
@@ -2409,13 +2412,8 @@ lua_task_has_urls (lua_State * L)
                                need_emails = lua_toboolean (L, 2);
                        }
 
-                       if (g_hash_table_size (MESSAGE_FIELD (task, urls)) > 0) {
-                               sz += g_hash_table_size (MESSAGE_FIELD (task, urls));
-                               ret = TRUE;
-                       }
-
-                       if (need_emails && g_hash_table_size (MESSAGE_FIELD (task, emails)) > 0) {
-                               sz += g_hash_table_size (MESSAGE_FIELD (task, emails));
+                       if (kh_size (MESSAGE_FIELD (task, urls)) > 0) {
+                               sz += kh_size (MESSAGE_FIELD (task, urls));
                                ret = TRUE;
                        }
                }
@@ -2438,15 +2436,7 @@ lua_task_inject_url (lua_State * L)
        struct rspamd_lua_url *url = lua_check_url (L, 2);
 
        if (task && task->message && url && url->url) {
-               struct rspamd_url *existing;
-
-               if ((existing = g_hash_table_lookup (MESSAGE_FIELD (task, urls),
-                               url->url)) == NULL) {
-                       g_hash_table_insert (MESSAGE_FIELD (task, urls), url->url, url->url);
-               }
-               else {
-                       existing->count ++;
-               }
+               rspamd_url_set_add_or_increase (MESSAGE_FIELD (task, urls), url->url);
        }
        else {
                return luaL_error (L, "invalid arguments");
@@ -2538,16 +2528,21 @@ lua_task_get_emails (lua_State * L)
        LUA_TRACE_POINT;
        struct rspamd_task *task = lua_check_task (L, 1);
        struct lua_tree_cb_data cb;
+       struct rspamd_url *u;
 
        if (task) {
                if (task->message) {
-                       lua_createtable (L, g_hash_table_size (MESSAGE_FIELD (task, emails)), 0);
+                       lua_createtable (L, kh_size (MESSAGE_FIELD (task, urls)), 0);
                        memset (&cb, 0, sizeof (cb));
                        cb.i = 1;
                        cb.L = L;
                        cb.mask = PROTOCOL_MAILTO;
-                       g_hash_table_foreach (MESSAGE_FIELD (task, emails),
-                                       lua_tree_url_callback, &cb);
+
+                       kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
+                               if ((u->protocol & PROTOCOL_MAILTO)) {
+                                       lua_tree_url_callback (u, u, &cb);
+                               }
+                       });
                }
                else {
                        lua_newtable (L);