diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-01-06 16:28:24 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-01-06 16:28:24 +0000 |
commit | 9943abd0403ae1326b1c80ab9754232bd00498ea (patch) | |
tree | 199f378403cc6fc4ab4660ae57eef7f4c3f2859e /src | |
parent | cfcfbd5e582eb2d1024003a92356046120ec29d7 (diff) | |
download | rspamd-9943abd0403ae1326b1c80ab9754232bd00498ea.tar.gz rspamd-9943abd0403ae1326b1c80ab9754232bd00498ea.zip |
[Fix] Try to fix GError leak
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/fuzzy_check.c | 61 |
1 files changed, 20 insertions, 41 deletions
diff --git a/src/plugins/fuzzy_check.c b/src/plugins/fuzzy_check.c index 9d0aa35e1..ff9066aee 100644 --- a/src/plugins/fuzzy_check.c +++ b/src/plugins/fuzzy_check.c @@ -142,7 +142,10 @@ struct fuzzy_client_session { struct fuzzy_learn_session { GPtrArray *commands; gint *saved; - GError **err; + struct { + const gchar *error_message; + gint error_code; + } err; struct rspamd_http_connection_entry *http_entry; struct rspamd_async_session *session; struct upstream *server; @@ -2724,11 +2727,9 @@ fuzzy_controller_io_callback (gint fd, short what, void *arg) msg_info_task ("cannot process fuzzy hash for message: %s", strerror (errno)); - if (*(session->err) == NULL) { - g_set_error (session->err, - g_quark_from_static_string (M), - errno, "read socket error: %s", strerror (errno)); - } + session->err.error_message = "read socket error"; + session->err.error_code = errno; + ret = return_error; } else { @@ -2793,11 +2794,8 @@ fuzzy_controller_io_callback (gint fd, short what, void *arg) symbol, rep->v1.flag); - if (*(session->err) == NULL) { - g_set_error (session->err, - g_quark_from_static_string (M), - rep->v1.value, "fuzzy hash is skipped"); - } + session->err.error_message = "fuzzy hash is skipped"; + session->err.error_code = rep->v1.value; } else { msg_info_task ( @@ -2812,11 +2810,8 @@ fuzzy_controller_io_callback (gint fd, short what, void *arg) rep->v1.flag, rep->v1.value); - if (*(session->err) == NULL) { - g_set_error (session->err, - g_quark_from_static_string (M), - rep->v1.value, "process fuzzy error"); - } + session->err.error_message = "process fuzzy error"; + session->err.error_code = rep->v1.value; } ret = return_finished; @@ -2841,12 +2836,8 @@ fuzzy_controller_io_callback (gint fd, short what, void *arg) else if (what & EV_WRITE) { /* Send commands to storage */ if (!fuzzy_cmd_vector_to_wire (fd, session->commands)) { - if (*(session->err) == NULL) { - g_set_error (session->err, - g_quark_from_static_string (M), - errno, "write socket error: %s", - strerror (errno)); - } + session->err.error_message = "write socket error"; + session->err.error_code = errno; ret = return_error; } } @@ -2908,13 +2899,11 @@ cleanup: * Therefore, we cleanup sessions earlier and actually this code is wrong. */ - if (*(session->err) != NULL) { + if (session->err.error_code != 0) { if (session->http_entry) { rspamd_controller_send_error (session->http_entry, - (*session->err)->code, (*session->err)->message); + session->err.error_code, session->err.error_message); } - - g_error_free (*session->err); } else { rspamd_upstream_ok (session->server); @@ -3238,8 +3227,7 @@ register_fuzzy_controller_call (struct rspamd_http_connection_entry *entry, struct fuzzy_rule *rule, struct rspamd_task *task, GPtrArray *commands, - gint *saved, - GError **err) + gint *saved) { struct fuzzy_learn_session *s; struct upstream *selected; @@ -3274,7 +3262,6 @@ register_fuzzy_controller_call (struct rspamd_http_connection_entry *entry, s->server = selected; s->saved = saved; s->fd = sock; - s->err = err; s->rule = rule; s->event_loop = task->event_loop; /* We ref connection to avoid freeing before we process fuzzy rule */ @@ -3307,7 +3294,6 @@ fuzzy_process_handler (struct rspamd_http_connection_entry *conn_ent, gboolean processed = FALSE, skip = FALSE; gint res = 0; guint i; - GError **err; GPtrArray *commands; lua_State *L; gint r, *saved, rules = 0, err_idx; @@ -3318,7 +3304,6 @@ fuzzy_process_handler (struct rspamd_http_connection_entry *conn_ent, session->lang_det, conn_ent->rt->event_loop, FALSE); task->cfg = ctx->cfg; saved = rspamd_mempool_alloc0 (session->pool, sizeof (gint)); - err = rspamd_mempool_alloc0 (session->pool, sizeof (GError *)); fuzzy_module_ctx = fuzzy_get_context (ctx->cfg); if (!is_hash) { @@ -3435,8 +3420,7 @@ fuzzy_process_handler (struct rspamd_http_connection_entry *conn_ent, rule, task, commands, - saved, - err); + saved); rspamd_mempool_add_destructor (task->task_pool, rspamd_ptr_array_free_hard, commands); g_ptr_array_free (args, TRUE); @@ -3456,8 +3440,7 @@ fuzzy_process_handler (struct rspamd_http_connection_entry *conn_ent, rule, task, commands, - saved, - err); + saved); rspamd_mempool_add_destructor (task->task_pool, rspamd_ptr_array_free_hard, commands); } @@ -3606,8 +3589,7 @@ static inline gint fuzzy_check_send_lua_learn (struct fuzzy_rule *rule, struct rspamd_task *task, GPtrArray *commands, - gint *saved, - GError **err) + gint *saved) { struct fuzzy_learn_session *s; struct upstream *selected; @@ -3635,7 +3617,6 @@ fuzzy_check_send_lua_learn (struct fuzzy_rule *rule, s->server = selected; s->saved = saved; s->fd = sock; - s->err = err; s->rule = rule; s->session = task->s; s->event_loop = task->event_loop; @@ -3669,13 +3650,11 @@ fuzzy_check_lua_process_learn (struct rspamd_task *task, struct fuzzy_rule *rule; gboolean processed = FALSE, res = TRUE; guint i; - GError **err; GPtrArray *commands; gint *saved, rules = 0; struct fuzzy_ctx *fuzzy_module_ctx = fuzzy_get_context (task->cfg); saved = rspamd_mempool_alloc0 (task->task_pool, sizeof (gint)); - err = rspamd_mempool_alloc0 (task->task_pool, sizeof (GError *)); PTR_ARRAY_FOREACH (fuzzy_module_ctx->fuzzy_rules, i, rule) { if (!res) { @@ -3701,7 +3680,7 @@ fuzzy_check_lua_process_learn (struct rspamd_task *task, if (commands != NULL) { res = fuzzy_check_send_lua_learn (rule, task, commands, - saved, err); + saved); rspamd_mempool_add_destructor (task->task_pool, rspamd_ptr_array_free_hard, commands); } |