From 0ad7327feafe6e1285265f0cb726ff34289c5d79 Mon Sep 17 00:00:00 2001 From: "jabber.developer2" Date: Fri, 17 Apr 2026 16:22:56 +0300 Subject: [PATCH] fix: null pointer dereference guards (CWE-476) - cmd_funcs.c: check strtok() return before use in cmd_process_input - cmd_funcs.c: check fdopen() return before use in cmd_sendfile - omemo.c: init fingerprint_len=0 and check _omemo_fingerprint_decode() return in omemo_is_trusted_identity (CWE-457/CWE-690) - omemo.c: early NULL return in _omemo_fingerprint_decode() for NULL input Found via GCC -fanalyzer. Not covered by upstream. --- src/command/cmd_funcs.c | 7 +++++++ src/omemo/omemo.c | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 1600078c..3b0cb9db 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -211,6 +211,9 @@ cmd_process_input(ProfWin* window, char* inp) if (inp[0] == '/') { auto_char char* inp_cpy = strdup(inp); char* command = strtok(inp_cpy, " "); + if (!command) { + return TRUE; + } char* question_mark = strchr(command, '?'); if (question_mark) { *question_mark = '\0'; @@ -4964,6 +4967,10 @@ cmd_sendfile(ProfWin* window, const char* const command, gchar** args) } FILE* fh = fdopen(fd, "rb"); + if (!fh) { + cons_show_error("Failed to open file for reading."); + goto out; + } if (omemo_enabled) { #ifdef HAVE_OMEMO diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index e68271a9..fa9f153b 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -1089,8 +1089,11 @@ omemo_is_trusted_identity(const char* const jid, const char* const fingerprint) .device_id = GPOINTER_TO_INT(device_id), }; - size_t fingerprint_len; + size_t fingerprint_len = 0; unsigned char* fingerprint_raw = _omemo_fingerprint_decode(fingerprint, &fingerprint_len); + if (!fingerprint_raw) { + return FALSE; + } unsigned char djb_type[] = { '\x05' }; signal_buffer* buffer = signal_buffer_create(djb_type, 1); buffer = signal_buffer_append(buffer, fingerprint_raw, fingerprint_len); @@ -1149,6 +1152,9 @@ _omemo_fingerprint(ec_public_key* identity, gboolean formatted) static unsigned char* _omemo_fingerprint_decode(const char* const fingerprint, size_t* len) { + if (!fingerprint) { + return NULL; + } unsigned char* output = malloc(strlen(fingerprint) / 2 + 1); int i; -- 2.49.1