commit 9943abd: [Fix] Try to fix GError leak
Vsevolod Stakhov
vsevolod at highsecure.ru
Wed Jan 6 16:35:07 UTC 2021
Author: Vsevolod Stakhov
Date: 2021-01-06 16:28:24 +0000
URL: https://github.com/rspamd/rspamd/commit/9943abd0403ae1326b1c80ab9754232bd00498ea
[Fix] Try to fix GError leak
---
src/plugins/fuzzy_check.c | 61 ++++++++++++++++-------------------------------
1 file 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);
}
More information about the Commits
mailing list