From e7b6051e570518721f30387eb582cf063066f7e8 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Sat, 17 Jul 2021 18:11:32 +0300 Subject: [PATCH 1/2] Fix memory leak in accounts_get_login_status() --- src/config/accounts.c | 4 ++++ src/event/server_events.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/config/accounts.c b/src/config/accounts.c index 774adc0d..6018cfff 100644 --- a/src/config/accounts.c +++ b/src/config/accounts.c @@ -958,6 +958,10 @@ accounts_get_login_status(const char* const account_name) if (g_strcmp0(setting, "last") == 0) { status = accounts_get_last_status(account_name); } + + if (setting) { + g_free(setting); + } return status; } diff --git a/src/event/server_events.c b/src/event/server_events.c index 7e5e3d7d..6e21fbd6 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -193,7 +193,8 @@ sv_ev_roster_received(void) cl_ev_presence_send(conn_presence, 0); } - free(last_activity_str); + g_free(status_message); + g_free(last_activity_str); const char* fulljid = connection_get_fulljid(); plugins_on_connect(account_name, fulljid); From afdae6ac029618f51bba586d0ee612326118ee47 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Sat, 17 Jul 2021 18:12:42 +0300 Subject: [PATCH 2/2] Reduce copy-paste in sv_ev_roster_received() --- src/event/server_events.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 6e21fbd6..a61aecf6 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -168,8 +168,9 @@ sv_ev_roster_received(void) resource_presence_t conn_presence = accounts_get_login_presence(account_name); char* last_activity_str = accounts_get_last_activity(account_name); char* status_message = accounts_get_login_status(account_name); - if (prefs_get_boolean(PREF_LASTACTIVITY) && last_activity_str) { + int diff_secs = 0; + if (prefs_get_boolean(PREF_LASTACTIVITY) && last_activity_str) { GTimeVal lasttv; GDateTime* nowdt = g_date_time_new_now_utc(); gboolean res = g_time_val_from_iso8601(last_activity_str, &lasttv); @@ -177,21 +178,14 @@ sv_ev_roster_received(void) if (res) { GDateTime* lastdt = g_date_time_new_from_timeval_utc(&lasttv); GTimeSpan diff_micros = g_date_time_difference(nowdt, lastdt); - int diff_secs = (diff_micros / 1000) / 1000; - - connection_set_presence_msg(status_message); - cl_ev_presence_send(conn_presence, diff_secs); + diff_secs = (diff_micros / 1000) / 1000; g_date_time_unref(lastdt); - } else { - connection_set_presence_msg(status_message); - cl_ev_presence_send(conn_presence, 0); } g_date_time_unref(nowdt); - } else { - connection_set_presence_msg(status_message); - cl_ev_presence_send(conn_presence, 0); } + connection_set_presence_msg(status_message); + cl_ev_presence_send(conn_presence, diff_secs); g_free(status_message); g_free(last_activity_str);