aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua
diff options
context:
space:
mode:
authorIvan Stakhov <50211739+LeftTry@users.noreply.github.com>2024-06-25 17:49:56 +0500
committerGitHub <noreply@github.com>2024-06-25 13:49:56 +0100
commitec1b9b8affaa66dd78f25f712040b3a1bb62fc39 (patch)
treef0d3659a7e57a7044e8247ee2cfefac13b0cd59f /src/lua
parent1995012959e219e02aef939f9fd3765ffd718e04 (diff)
downloadrspamd-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.c57
-rw-r--r--src/lua/lua_url.c12
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,