diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index ff642e7c..83911551 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -804,6 +804,10 @@ omemo_on_message_send(ProfWin* win, const char* const message, gboolean request_ tag_len = AES128_GCM_TAG_LENGTH; tag = gcry_malloc_secure(tag_len); key_tag = gcry_malloc_secure(AES128_GCM_KEY_LENGTH + AES128_GCM_TAG_LENGTH); + if (!tag || !key_tag) { + log_error("[OMEMO][SEND] cannot allocate secure buffers"); + goto out; + } key = gcry_random_bytes_secure(AES128_GCM_KEY_LENGTH + AES128_GCM_IV_LENGTH, GCRY_VERY_STRONG_RANDOM); if (!key) { @@ -1993,10 +1997,6 @@ _cache_device_identity(const char* const jid, uint32_t device_id, ec_public_key* g_hash_table_insert(omemo_static_data.fingerprint_ac, strdup(jid), ac); } - if (!fingerprint) { - return; - } - char* formatted_fingerprint = omemo_format_fingerprint(fingerprint); if (formatted_fingerprint) { autocomplete_add(ac, formatted_fingerprint); diff --git a/src/tools/editor.c b/src/tools/editor.c index 85690022..5c53e422 100644 --- a/src/tools/editor.c +++ b/src/tools/editor.c @@ -121,11 +121,11 @@ launch_editor(gchar* initial_content, void (*callback)(gchar* content, void* dat ui_suspend(); - // Ensure GLib's SIGCHLD handler is installed before forking to prevent - // zombie children if the editor is launched before the main loop starts. - GMainContext* main_ctx = g_main_context_default(); - g_main_context_acquire(main_ctx); - g_main_context_release(main_ctx); + // Force GLib to install its SIGCHLD handler before forking. Creating a + // GChildWatchSource for our own pid is the documented trigger; we never + // attach or dispatch it, just rely on the side effect. + GSource* sigchld_warmup = g_child_watch_source_new(getpid()); + g_source_unref(sigchld_warmup); pid_t pid = fork(); if (pid == -1) { diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index da5bb543..9efb3fad 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -170,12 +170,7 @@ status_bar_current(guint i) void status_bar_inactive(const int win) { - int true_win = win; - if (true_win == 0) { - true_win = 10; - } - - g_hash_table_remove(statusbar->tabs, GINT_TO_POINTER(true_win)); + g_hash_table_remove(statusbar->tabs, GINT_TO_POINTER((win == 0) ? CONSOLE_TAB_ID : win)); status_bar_draw(); } @@ -183,8 +178,6 @@ status_bar_inactive(const int win) void _create_tab(const int win, win_type_t wintype, char* identifier, gboolean highlight) { - int true_win = win == 0 ? 10 : win; - StatusBarTab* tab = g_new0(StatusBarTab, 1); tab->identifier = strdup(identifier); tab->highlight = highlight; @@ -214,7 +207,7 @@ _create_tab(const int win, win_type_t wintype, char* identifier, gboolean highli } } - g_hash_table_replace(statusbar->tabs, GINT_TO_POINTER(true_win), tab); + g_hash_table_replace(statusbar->tabs, GINT_TO_POINTER((win == 0) ? CONSOLE_TAB_ID : win), tab); status_bar_draw(); } diff --git a/src/xmpp/jid.c b/src/xmpp/jid.c index 4387a696..c36538e1 100644 --- a/src/xmpp/jid.c +++ b/src/xmpp/jid.c @@ -15,6 +15,7 @@ #include #include "common.h" +#include "log.h" #include "xmpp/jid.h" #define JID_MAX_PART_LEN 1023