diff options
author | Ivan Stakhov <50211739+LeftTry@users.noreply.github.com> | 2024-06-25 17:49:56 +0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-25 13:49:56 +0100 |
commit | ec1b9b8affaa66dd78f25f712040b3a1bb62fc39 (patch) | |
tree | f0d3659a7e57a7044e8247ee2cfefac13b0cd59f /src/lua | |
parent | 1995012959e219e02aef939f9fd3765ffd718e04 (diff) | |
download | rspamd-ec1b9b8affaa66dd78f25f712040b3a1bb62fc39.tar.gz rspamd-ec1b9b8affaa66dd78f25f712040b3a1bb62fc39.zip |
Fixed bug with task:inject() function according to the issue #5010 (#5021)
* [Fix] Fix issue with task:inject_url
* [Minor] Code clean up
* [Minor] Clean up
* [Minor] Small fix
* [Minor] Fix small typo
* [Test] Debug
* [Test] Debug
* [Test] Debug inject_url
* [Test] Debugging
* [Test] Debugging task:inject test
* [Test] Debugging task:inject test
* [Test] Debugging task:inject test
* [Minor] Debug task:inject_url test
* [Minor] Small fix
* [Minor] Debug task:inject_url test
* [Test] Test base task:inject
* [Test] Test updated task:inject
* [Test] Test updated task:inject
* [Test] Test updated task:inject
* [Test] Test updated task:inject
* [Test] Test updated task:inject
* [Test] Test fixed task:inject
* [Test] Test fixed task:inject
* [Test] Testing task:inject
* [Test] Testing task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Test base task:inject
* [Test] Test base task:inject
* [Test] Test base task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Test] Fix task:inject
* [Minor] Clean up code in task:inject
* [Minor] Updated test for task:inject
* [Test] Debug test for task:inject_url
* [Test] Debug test for task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Fix task:inject_url
* [Test] Check task:inject_url
* [Test] Check task:inject_url
* [Test] Check task:inject_url
* [Test] Check task:inject_url
* [Test] Check task:inject_url
* [Test] Check task:inject_url
* [Minor] Clean up code
* [Minor] Clean up code
* [Minor] Little fix for error messages in url.create function
* [Test] Change way to inject url
* [Test] Fix inject url
* [Test] Fix inject url
* [Test] Fix inject url
* [Test] Fix inject url
* [Test] Fix inject url
* [Minor] Clean up code
* [Test] Without fake mime_part
* [Test] Without fake mime_part
* [Minor] Clean up
* [Test] Mime part of the task
* [Test] Mpart should exist
* [Test] Mpart should exist
* [Test] Mpart should exist
* [Test] Another check for mpart->urls
* [Minor] Clean up
* [Minor] Clean up
* [Fix] Fixing OpenSSL 3.0 compatibility
* [Fix] Reverted
Diffstat (limited to 'src/lua')
-rw-r--r-- | src/lua/lua_task.c | 57 | ||||
-rw-r--r-- | src/lua/lua_url.c | 12 |
2 files changed, 58 insertions, 11 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index edbe5b89a..dc41d4ab7 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -2634,6 +2634,53 @@ lua_task_has_urls(lua_State *L) return 2; } +struct rspamd_url_query_to_inject_cbd { + struct rspamd_task *task; + struct rspamd_url *url; + GPtrArray *mpart_urls; +}; + +static gboolean +inject_url_query_callback(struct rspamd_url *url, gsize start_offset, + gsize end_offset, gpointer ud) +{ + struct rspamd_url_query_to_inject_cbd *cbd = + (struct rspamd_url_query_to_inject_cbd *) ud; + struct rspamd_task *task; + + task = cbd->task; + + url->flags |= RSPAMD_URL_FLAG_QUERY; + + if (rspamd_url_set_add_or_increase(MESSAGE_FIELD(task, urls), url, false) && cbd->mpart_urls) { + g_ptr_array_add(cbd->mpart_urls, url); + } + + return TRUE; +} + +static void +inject_url_query(struct rspamd_task *task, struct rspamd_url *url, + GPtrArray *part_urls) +{ + if (url->querylen > 0) { + struct rspamd_url_query_to_inject_cbd cbd; + + cbd.task = task; + cbd.url = url; + cbd.mpart_urls = part_urls; + + rspamd_url_find_multiple(task->task_pool, + rspamd_url_query_unsafe(url), url->querylen, + RSPAMD_URL_FIND_ALL, NULL, + inject_url_query_callback, &cbd); + } + + if (part_urls) { + g_ptr_array_add(part_urls, url); + } +} + static int lua_task_inject_url(lua_State *L) { @@ -2644,15 +2691,13 @@ lua_task_inject_url(lua_State *L) if (lua_isuserdata(L, 3)) { /* We also have a mime part there */ - mpart = *((struct rspamd_mime_part **) rspamd_lua_check_udata_maybe(L, - 3, rspamd_mimepart_classname)); + mpart = *((struct rspamd_mime_part **) + rspamd_lua_check_udata_maybe(L, 3, rspamd_mimepart_classname)); } - if (task && task->message && url && url->url) { if (rspamd_url_set_add_or_increase(MESSAGE_FIELD(task, urls), url->url, false)) { - if (mpart && mpart->urls) { - /* Also add url to the mime part */ - g_ptr_array_add(mpart->urls, url->url); + if(mpart && mpart->urls) { + inject_url_query(task, url->url, mpart->urls); } } } diff --git a/src/lua/lua_url.c b/src/lua/lua_url.c index 8e6680a91..28c42f9f9 100644 --- a/src/lua/lua_url.c +++ b/src/lua/lua_url.c @@ -855,18 +855,20 @@ lua_url_create(lua_State *L) if (lua_type(L, 1) == LUA_TUSERDATA) { pool = rspamd_lua_check_mempool(L, 1); t = lua_check_text_or_string(L, 2); + if (t == NULL) { + return luaL_error(L, "invalid arguments: string/text is expected as the second argument"); + } } else { pool = static_lua_url_pool; t = lua_check_text_or_string(L, 1); + if (t == NULL) { + return luaL_error(L, "invalid arguments: string/text is expected as the first argument"); + } } if (pool == NULL) { - return luaL_error(L, "invalid arguments: mempool is expected as the second argument"); - } - - if (t == NULL) { - return luaL_error(L, "invalid arguments: string/text is expected as the first argument"); + return luaL_error(L, "invalid arguments: mempool is expected as the first argument"); } rspamd_url_find_single(pool, t->start, t->len, RSPAMD_URL_FIND_ALL, |