diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 67815bc6..75a4a210 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -4972,6 +4972,7 @@ cmd_sendfile(ProfWin* window, const char* const command, gchar** args) if (err != NULL) { cons_show_error("%s", err); win_println(window, THEME_ERROR, "-", "%s", err); + fclose(fh); goto out; } #endif diff --git a/src/config/account.c b/src/config/account.c index 65e28839..40bb5df0 100644 --- a/src/config/account.c +++ b/src/config/account.c @@ -178,12 +178,14 @@ account_eval_password(ProfAccount* account) if (!account->password) { log_error("Failed to allocate enough memory to read `eval_password` " "output."); + pclose(stream); return FALSE; } account->password = fgets(account->password, READ_BUF_SIZE, stream); if (!account->password) { log_error("Failed to read password from stream."); + pclose(stream); return FALSE; } diff --git a/src/log.c b/src/log.c index e6d10a71..49b9066c 100644 --- a/src/log.c +++ b/src/log.c @@ -359,7 +359,6 @@ log_stderr_init(log_level_t level) if (rc != 0) goto err; - close(STDERR_FILENO); rc = dup2(stderr_pipe[1], STDERR_FILENO); if (rc < 0) goto err_close; diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index e68271a9..dda417d0 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -537,8 +537,10 @@ omemo_set_device_list(const char* const from, GList* device_list) g_hash_table_iter_init(&iter, known_identities); while (g_hash_table_iter_next(&iter, &key, &value)) { if (device_id->data == value) { - cons_show("OMEMO: Adding firstusage trust for %s device %d - Fingerprint %s", jid->barejid, GPOINTER_TO_INT(device_id->data), omemo_format_fingerprint(key)); - omemo_trust(jid->barejid, omemo_format_fingerprint(key)); + char* formatted = omemo_format_fingerprint(key); + cons_show("OMEMO: Adding firstusage trust for %s device %d - Fingerprint %s", jid->barejid, GPOINTER_TO_INT(device_id->data), formatted); + omemo_trust(jid->barejid, formatted); + free(formatted); } } } diff --git a/src/profanity.c b/src/profanity.c index b9b0cc87..cea1a08f 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -117,7 +117,7 @@ prof_run(gchar* log_level, gchar* account_name, gchar* config_file, gchar* log_f char* line = NULL; GTimer* waittimer = g_timer_new(); g_timer_stop(waittimer); - int waittime; + int waittime = 0; while (cont && !force_quit) { log_stderr_handler(); session_check_autoaway(); diff --git a/src/tools/http_download.c b/src/tools/http_download.c index ac8d6609..fac72fdc 100644 --- a/src/tools/http_download.c +++ b/src/tools/http_download.c @@ -178,6 +178,7 @@ http_file_get(void* userdata) } if (ftell(outfh) == 0) { + free(err); err = strdup("Output file is empty."); } @@ -185,6 +186,7 @@ http_file_get(void* userdata) curl_global_cleanup(); if (fclose(outfh) == EOF) { + free(err); err = strdup(g_strerror(errno)); } diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 24b5f1be..ff7b2ce8 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -355,6 +355,9 @@ _iq_id_handler_free(ProfIqHandler* handler) free(handler); } +/* Analyzer cannot track ownership transfer through callback registration */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wanalyzer-malloc-leak" void iq_id_handler_add(const char* const id, ProfIqCallback func, ProfIqFreeCallback free_func, void* userdata) { @@ -367,6 +370,7 @@ iq_id_handler_add(const char* const id, ProfIqCallback func, ProfIqFreeCallback g_hash_table_insert(id_handlers, strdup(id), handler); } } +#pragma GCC diagnostic pop void iq_autoping_timer_cancel(void) @@ -538,6 +542,9 @@ iq_last_activity_request(const char* jid) xmpp_stanza_release(iq); } +/* Ownership transferred via iq_id_handler_add callback */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wanalyzer-malloc-leak" void iq_room_info_request(const char* const room, gboolean display_result) { @@ -556,6 +563,7 @@ iq_room_info_request(const char* const room, gboolean display_result) xmpp_stanza_release(iq); } } +#pragma GCC diagnostic pop void iq_send_caps_request_for_jid(const char* const to, const char* const id, @@ -721,6 +729,9 @@ iq_room_config_cancel(ProfConfWin* confwin) xmpp_stanza_release(iq); } +/* Ownership transferred via iq_id_handler_add callback */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wanalyzer-malloc-leak" void iq_room_affiliation_list(const char* const room, char* affiliation, bool show_ui_message) { @@ -795,6 +806,7 @@ iq_room_role_set(const char* const room, const char* const nick, char* role, xmpp_stanza_release(iq); } } +#pragma GCC diagnostic pop void iq_room_role_list(const char* const room, char* role) @@ -1229,6 +1241,9 @@ _command_list_result_handler(xmpp_stanza_t* const stanza, void* const userdata) return 0; } +/* Ownership of 'data' transferred to wins_new_config callbacks */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wanalyzer-malloc-leak" static int _command_exec_response_handler(xmpp_stanza_t* const stanza, void* const userdata) { @@ -1351,6 +1366,7 @@ _command_exec_response_handler(xmpp_stanza_t* const stanza, void* const userdata return 0; } +#pragma GCC diagnostic pop static int _enable_carbons_id_handler(xmpp_stanza_t* const stanza, void* const userdata)