From 1ae78400a441bc2d8d80bf47a67933b8b6ef12e9 Mon Sep 17 00:00:00 2001 From: Andreas Stieger Date: Wed, 10 Sep 2025 13:57:36 +0200 Subject: [PATCH 01/12] Fix tests with gcc15 (uintptr_t) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes: error: ‘uintptr_t’ undeclared, defined in header ‘ (cherry picked from commit 9f2abc75ad27d3dcc951b8fc5aa922bdbe76f287) Author: Andreas Stieger --- tests/unittests/config/stub_accounts.c | 1 + tests/unittests/log/stub_log.c | 1 + tests/unittests/test_autocomplete.c | 1 + tests/unittests/test_chat_session.c | 1 + tests/unittests/test_common.c | 1 + tests/unittests/test_jid.c | 1 + tests/unittests/test_parser.c | 1 + tests/unittests/test_preferences.c | 1 + tests/unittests/test_roster_list.c | 1 + 9 files changed, 9 insertions(+) diff --git a/tests/unittests/config/stub_accounts.c b/tests/unittests/config/stub_accounts.c index 360e5643..981d0180 100644 --- a/tests/unittests/config/stub_accounts.c +++ b/tests/unittests/config/stub_accounts.c @@ -1,5 +1,6 @@ #include #include +#include #include #include diff --git a/tests/unittests/log/stub_log.c b/tests/unittests/log/stub_log.c index 23ab5cdc..f0f67e47 100644 --- a/tests/unittests/log/stub_log.c +++ b/tests/unittests/log/stub_log.c @@ -20,6 +20,7 @@ * */ +#include #include #include #include diff --git a/tests/unittests/test_autocomplete.c b/tests/unittests/test_autocomplete.c index 599cf390..0e307351 100644 --- a/tests/unittests/test_autocomplete.c +++ b/tests/unittests/test_autocomplete.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include diff --git a/tests/unittests/test_chat_session.c b/tests/unittests/test_chat_session.c index 26845dbc..2de18c08 100644 --- a/tests/unittests/test_chat_session.c +++ b/tests/unittests/test_chat_session.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "xmpp/chat_session.h" diff --git a/tests/unittests/test_common.c b/tests/unittests/test_common.c index f381947b..e340fcf3 100644 --- a/tests/unittests/test_common.c +++ b/tests/unittests/test_common.c @@ -5,6 +5,7 @@ #include #include #include +#include void replace_one_substr(void** state) diff --git a/tests/unittests/test_jid.c b/tests/unittests/test_jid.c index 645a7b0a..77886e4a 100644 --- a/tests/unittests/test_jid.c +++ b/tests/unittests/test_jid.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include diff --git a/tests/unittests/test_parser.c b/tests/unittests/test_parser.c index 3d0d3fc6..8019097d 100644 --- a/tests/unittests/test_parser.c +++ b/tests/unittests/test_parser.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include diff --git a/tests/unittests/test_preferences.c b/tests/unittests/test_preferences.c index 7868791d..1eb2ba36 100644 --- a/tests/unittests/test_preferences.c +++ b/tests/unittests/test_preferences.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include diff --git a/tests/unittests/test_roster_list.c b/tests/unittests/test_roster_list.c index fc10d1a7..185a9c72 100644 --- a/tests/unittests/test_roster_list.c +++ b/tests/unittests/test_roster_list.c @@ -5,6 +5,7 @@ #include #include #include +#include #include "xmpp/contact.h" #include "xmpp/roster_list.h" -- 2.49.1 From 6b6576b31c53a2edb6ada7e3379750a69199b188 Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Wed, 10 Sep 2025 13:58:57 +0200 Subject: [PATCH 02/12] Fix typo in examples. (cherry picked from commit 5696bf77c73300ddc0075aac78ca29a504ea14ad) Author: Martin Dosch --- src/command/cmd_defs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index 00879725..e9b20605 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -433,7 +433,7 @@ static const struct cmd_t command_defs[] = { { "", "The contact you wish to view information about." }, { "", "When in a chat room, the occupant you wish to view information about." }) CMD_EXAMPLES( - "/info thor@aasgard.server.org", + "/info thor@asgard.server.org", "/info heimdall") }, -- 2.49.1 From 36f183d6a408c4bc0e85b0f99994abcdac1cf09a Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:00:07 +0200 Subject: [PATCH 03/12] Separate entries visually in my-prof.supp Signed-off-by: Steffen Jaeckel (cherry picked from commit 3370f8a7f1641e571d9219a69d723d1bf5b20d3f) --- Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile.am b/Makefile.am index 872c0b02..dc17499c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -347,9 +347,13 @@ endif .PHONY: my-prof.supp my-prof.supp: @sed '/^# AUTO-GENERATED START/q' prof.supp > $@ + @printf "\n\n# glib\n" >> $@ @cat /usr/share/glib-2.0/valgrind/glib.supp >> $@ + @printf "\n\n# Python\n" >> $@ @wget -O- https://raw.githubusercontent.com/python/cpython/refs/tags/v`python3 --version | cut -d' ' -f2`/Misc/valgrind-python.supp >> $@ + @printf "\n\n# gtk\n" >> $@ @test -z "@GTK_VERSION@" || wget -O- https://raw.githubusercontent.com/GNOME/gtk/refs/tags/@GTK_VERSION@/gtk.supp >> $@ + @printf "\n\n# more gtk\n" >> $@ @test -z "@GTK_VERSION@" || cat /usr/share/gtk-3.0/valgrind/gtk.supp >> $@ check-unit: tests/unittests/unittests -- 2.49.1 From 0d5123e69a3adbb401101ea486065f6d472318c2 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:00:51 +0200 Subject: [PATCH 04/12] Trampoline Python unref again. In the past `Py_XDECREF()` was a macro. Preserve compat to ancient Python versions by having a trampoline which calls `Py_XDECREF()`. Fixes: #2043 Fixes: c0da36c4 ("Rage-cleanup.") Signed-off-by: Steffen Jaeckel (cherry picked from commit 3299dd8fc62dd317a9bdf83408d6d5e28b9ecfa0) --- src/plugins/python_plugins.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plugins/python_plugins.c b/src/plugins/python_plugins.c index 13278750..3b50c961 100644 --- a/src/plugins/python_plugins.c +++ b/src/plugins/python_plugins.c @@ -86,10 +86,16 @@ python_get_version_number(void) return version_number; } +static void +_unref_module(PyObject* module) +{ + Py_XDECREF(module); +} + void python_env_init(void) { - loaded_modules = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)Py_XDECREF); + loaded_modules = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_unref_module); python_init_prof(); -- 2.49.1 From 39aab45162cb83ff634802da1b018f08dfbc36e3 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:01:22 +0200 Subject: [PATCH 05/12] Fix memory leak. Signed-off-by: Steffen Jaeckel (cherry picked from commit e0f107f75eadd2a807044b4deee0c29efc3cce29) --- src/command/cmd_funcs.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index ae3d0600..ee7fd4a2 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -8577,19 +8577,20 @@ cmd_omemo_trust_mode(ProfWin* window, const char* const command, gchar** args) { #ifdef HAVE_OMEMO + auto_gchar gchar* trust_mode = prefs_get_string(PREF_OMEMO_TRUST_MODE); if (!args[1]) { - cons_show("Current trust mode is %s", prefs_get_string(PREF_OMEMO_TRUST_MODE)); + cons_show("Current trust mode is %s", trust_mode); return TRUE; } if (g_strcmp0(args[1], "manual") == 0) { - cons_show("Current trust mode is %s - setting to %s", prefs_get_string(PREF_OMEMO_TRUST_MODE), args[1]); + cons_show("Current trust mode is %s - setting to %s", trust_mode, args[1]); cons_show("You need to trust all OMEMO fingerprints manually"); } else if (g_strcmp0(args[1], "firstusage") == 0) { - cons_show("Current trust mode is %s - setting to %s", prefs_get_string(PREF_OMEMO_TRUST_MODE), args[1]); + cons_show("Current trust mode is %s - setting to %s", trust_mode, args[1]); cons_show("The first seen OMEMO fingerprints will be trusted automatically - new keys must be trusted manually"); } else if (g_strcmp0(args[1], "blind") == 0) { - cons_show("Current trust mode is %s - setting to %s", prefs_get_string(PREF_OMEMO_TRUST_MODE), args[1]); + cons_show("Current trust mode is %s - setting to %s", trust_mode, args[1]); cons_show("ALL OMEMO fingerprints will be trusted automatically"); } else { cons_bad_cmd_usage(command); -- 2.49.1 From 1a385b8cd2a2814f48fc956634f5b12d711feede Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:05:30 +0200 Subject: [PATCH 06/12] Refactor slashguard Fixes #2054 Fixes: 95c2199c ("Some more memory improvements") Signed-off-by: Steffen Jaeckel (cherry picked from commit 40aafd06e770fa7c4eaf0d5261217fc15fad3046) --- src/ui/inputwin.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index c1765d11..0bb9acbf 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -170,6 +170,25 @@ create_input_window(void) _inp_win_update_virtual(); } +static gboolean +_inp_slashguard_check(void) +{ + if (get_password) + return false; + /* ignore empty and quoted messages */ + if (inp_line == NULL || inp_line[0] == '\0' || inp_line[0] == '>') + return false; + if (!prefs_get_boolean(PREF_SLASH_GUARD)) + return false; + if (memchr(inp_line + 1, '/', 3)) { + cons_show("Your text contains a slash in the first 4 characters"); + free(inp_line); + inp_line = NULL; + return true; + } + return false; +} + char* inp_readline(void) { @@ -203,17 +222,7 @@ inp_readline(void) chat_state_idle(); } - if (inp_line) { - if (!get_password && prefs_get_boolean(PREF_SLASH_GUARD)) { - // ignore quoted messages - if (strlen(inp_line) > 1 && inp_line[0] != '>') { - char* res = (char*)memchr(inp_line + 1, '/', 3); - if (res) { - cons_show("Your text contains a slash in the first 4 characters"); - return NULL; - } - } - } + if (inp_line && !_inp_slashguard_check()) { char* ret = inp_line; inp_line = NULL; return ret; -- 2.49.1 From d3fa1c2f78fdfc1c5a9565b64a53669c8d62259d Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:07:41 +0200 Subject: [PATCH 07/12] Tidy up some code * less allocations * less duplicate code Signed-off-by: Steffen Jaeckel (cherry picked from commit 9d335729a0c47fa2da9505a86b0366b381d689e1) --- src/command/cmd_ac.c | 64 +++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index 0caba5ba..facbbd30 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -1675,7 +1675,7 @@ char* cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean previous) { unsigned int output_off = 0; - char* tmp; + char* tmp = NULL; // strip command char* inpcp = (char*)input + strlen(startstr); @@ -1687,38 +1687,36 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean // strip quotes if (*inpcp == '"') { - tmp = strchr(inpcp + 1, '"'); + tmp = strrchr(inpcp + 1, '"'); if (tmp) { *tmp = '\0'; } tmp = strdup(inpcp + 1); free(inpcp); inpcp = tmp; + tmp = NULL; } // expand ~ to $HOME if (inpcp[0] == '~' && inpcp[1] == '/') { - tmp = g_strdup_printf("%s/%sfoo", getenv("HOME"), inpcp + 2); - if (!tmp) { + char* home = getenv("HOME"); + if (!home) { free(inpcp); return NULL; } - output_off = strlen(getenv("HOME")) + 1; + tmp = g_strdup_printf("%s/%sfoo", home, inpcp + 2); + output_off = strlen(home) + 1; } else { tmp = g_strdup_printf("%sfoo", inpcp); - if (!tmp) { - free(inpcp); - return NULL; - } } free(inpcp); - inpcp = tmp; + if (!tmp) { + return NULL; + } - char* inpcp2 = strdup(inpcp); - char* foofile = strdup(basename(inpcp2)); - char* directory = strdup(dirname(inpcp)); - free(inpcp); - free(inpcp2); + char* foofile = strdup(basename(tmp)); + char* directory = strdup(dirname(tmp)); + g_free(tmp); GArray* files = g_array_new(TRUE, FALSE, sizeof(char*)); g_array_set_clear_func(files, (GDestroyNotify)_filepath_item_free); @@ -1737,40 +1735,26 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean continue; } - char* acstring; + char* acstring = NULL; if (output_off) { tmp = g_strdup_printf("%s/%s", directory, dir->d_name); - if (!tmp) { - free(directory); - free(foofile); - return NULL; + if (tmp) { + acstring = g_strdup_printf("~/%s", tmp + output_off); + g_free(tmp); } - acstring = g_strdup_printf("~/%s", tmp + output_off); - if (!acstring) { - free(directory); - free(foofile); - return NULL; - } - free(tmp); } else if (strcmp(directory, "/") == 0) { acstring = g_strdup_printf("/%s", dir->d_name); - if (!acstring) { - free(directory); - free(foofile); - return NULL; - } } else { acstring = g_strdup_printf("%s/%s", directory, dir->d_name); - if (!acstring) { - free(directory); - free(foofile); - return NULL; - } + } + if (!acstring) { + g_array_free(files, TRUE); + free(foofile); + free(directory); + return NULL; } - char* acstring_cpy = strdup(acstring); - g_array_append_val(files, acstring_cpy); - free(acstring); + g_array_append_val(files, acstring); } closedir(d); } -- 2.49.1 From 988d3663d1002ee5e9b7b7abd258be4eceeabebc Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:11:03 +0200 Subject: [PATCH 08/12] Introduce `tests/prof_cmocka.h` As 9f2abc75 accidentally got the ordering of some of the includes wrong, I decided to propose my initial solution again. Additional to that, I've opened a MR against CMocka to solve this on their side, since I believe that the current way this is done is not sustainable [0]. [0] https://gitlab.com/cmocka/cmocka/-/merge_requests/91 Fixes: 9f2abc75 ("Fix tests with gcc15 (uintptr_t)") Signed-off-by: Steffen Jaeckel CProof note: our new tests need to also be updated. --- Makefile.am | 3 +++ tests/functionaltests/functionaltests.c | 5 +---- tests/functionaltests/proftest.c | 5 +---- tests/functionaltests/test_carbons.c | 5 +---- tests/functionaltests/test_chat_session.c | 5 +---- tests/functionaltests/test_connect.c | 5 +---- tests/functionaltests/test_disconnect.c | 5 +---- tests/functionaltests/test_message.c | 5 +---- tests/functionaltests/test_muc.c | 5 +---- tests/functionaltests/test_ping.c | 5 +---- tests/functionaltests/test_presence.c | 5 +---- tests/functionaltests/test_receipts.c | 5 +---- tests/functionaltests/test_rooms.c | 5 +---- tests/functionaltests/test_roster.c | 5 +---- tests/functionaltests/test_software.c | 5 +---- tests/prof_cmocka.h | 5 +++++ tests/unittests/chatlog/stub_chatlog.c | 3 +-- tests/unittests/config/stub_accounts.c | 6 +----- tests/unittests/database/stub_database.c | 3 +-- tests/unittests/helpers.c | 5 +---- tests/unittests/log/stub_log.c | 4 +--- tests/unittests/otr/stub_otr.c | 5 +---- tests/unittests/test_autocomplete.c | 6 +----- tests/unittests/test_callbacks.c | 5 +---- tests/unittests/test_chat_session.c | 6 +----- tests/unittests/test_cmd_account.c | 5 +---- tests/unittests/test_cmd_alias.c | 5 +---- tests/unittests/test_cmd_bookmark.c | 5 +---- tests/unittests/test_cmd_connect.c | 5 +---- tests/unittests/test_cmd_disconnect.c | 5 +---- tests/unittests/test_cmd_join.c | 5 +---- tests/unittests/test_cmd_otr.c | 5 +---- tests/unittests/test_cmd_pgp.c | 5 +---- tests/unittests/test_cmd_presence.c | 5 +---- tests/unittests/test_cmd_rooms.c | 5 +---- tests/unittests/test_cmd_roster.c | 5 +---- tests/unittests/test_cmd_sub.c | 5 +---- tests/unittests/test_common.c | 6 +----- tests/unittests/test_contact.c | 5 +---- tests/unittests/test_form.c | 5 +---- tests/unittests/test_jid.c | 6 +----- tests/unittests/test_keyhandlers.c | 5 +---- tests/unittests/test_muc.c | 5 +---- tests/unittests/test_parser.c | 6 +----- tests/unittests/test_plugins_disco.c | 5 +---- tests/unittests/test_preferences.c | 6 +----- tests/unittests/test_roster_list.c | 6 +----- tests/unittests/test_server_events.c | 5 +---- tests/unittests/ui/stub_ui.c | 3 +-- tests/unittests/unittests.c | 5 +---- tests/unittests/xmpp/stub_xmpp.c | 5 +---- 51 files changed, 57 insertions(+), 197 deletions(-) create mode 100644 tests/prof_cmocka.h diff --git a/Makefile.am b/Makefile.am index dc17499c..7301e5b2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -124,6 +124,7 @@ unittest_sources = \ src/event/server_events.c src/event/server_events.h \ src/event/client_events.c src/event/client_events.h \ src/ui/tray.h src/ui/tray.c \ + tests/prof_cmocka.h \ tests/unittests/xmpp/stub_vcard.c \ tests/unittests/xmpp/stub_avatar.c \ tests/unittests/xmpp/stub_ox.c \ @@ -170,6 +171,7 @@ unittest_sources = \ tests/unittests/unittests.c functionaltest_sources = \ + tests/prof_cmocka.h \ tests/functionaltests/proftest.c tests/functionaltests/proftest.h \ tests/functionaltests/test_connect.c tests/functionaltests/test_connect.h \ tests/functionaltests/test_ping.c tests/functionaltests/test_ping.h \ @@ -284,6 +286,7 @@ endif TESTS = tests/unittests/unittests check_PROGRAMS = tests/unittests/unittests +tests_unittests_unittests_CPPFLAGS = -Itests/ tests_unittests_unittests_SOURCES = $(unittest_sources) tests_unittests_unittests_LDADD = -lcmocka diff --git a/tests/functionaltests/functionaltests.c b/tests/functionaltests/functionaltests.c index 3106a0e2..ea957e49 100644 --- a/tests/functionaltests/functionaltests.c +++ b/tests/functionaltests/functionaltests.c @@ -1,10 +1,7 @@ -#include #include #include #include -#include -#include -#include +#include "prof_cmocka.h" #include #include "config.h" diff --git a/tests/functionaltests/proftest.c b/tests/functionaltests/proftest.c index 2fe904e4..29c1d4f4 100644 --- a/tests/functionaltests/proftest.c +++ b/tests/functionaltests/proftest.c @@ -2,11 +2,8 @@ #include #include -#include -#include -#include #include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/functionaltests/test_carbons.c b/tests/functionaltests/test_carbons.c index 7926a76f..ddf6194d 100644 --- a/tests/functionaltests/test_carbons.c +++ b/tests/functionaltests/test_carbons.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_chat_session.c b/tests/functionaltests/test_chat_session.c index 6589ae36..355b977f 100644 --- a/tests/functionaltests/test_chat_session.c +++ b/tests/functionaltests/test_chat_session.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_connect.c b/tests/functionaltests/test_connect.c index e7dae21e..571293dc 100644 --- a/tests/functionaltests/test_connect.c +++ b/tests/functionaltests/test_connect.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_disconnect.c b/tests/functionaltests/test_disconnect.c index 83861980..2827805f 100644 --- a/tests/functionaltests/test_disconnect.c +++ b/tests/functionaltests/test_disconnect.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_message.c b/tests/functionaltests/test_message.c index d73f3bb4..ab477512 100644 --- a/tests/functionaltests/test_message.c +++ b/tests/functionaltests/test_message.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_muc.c b/tests/functionaltests/test_muc.c index 6150c77c..c85b7f3e 100644 --- a/tests/functionaltests/test_muc.c +++ b/tests/functionaltests/test_muc.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_ping.c b/tests/functionaltests/test_ping.c index 834e4447..a5aeba3b 100644 --- a/tests/functionaltests/test_ping.c +++ b/tests/functionaltests/test_ping.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_presence.c b/tests/functionaltests/test_presence.c index 91bd2644..0bd1915d 100644 --- a/tests/functionaltests/test_presence.c +++ b/tests/functionaltests/test_presence.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_receipts.c b/tests/functionaltests/test_receipts.c index 59054ee8..3debd977 100644 --- a/tests/functionaltests/test_receipts.c +++ b/tests/functionaltests/test_receipts.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_rooms.c b/tests/functionaltests/test_rooms.c index 49b1d892..dbe861e1 100644 --- a/tests/functionaltests/test_rooms.c +++ b/tests/functionaltests/test_rooms.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_roster.c b/tests/functionaltests/test_roster.c index c16764be..e6453fe1 100644 --- a/tests/functionaltests/test_roster.c +++ b/tests/functionaltests/test_roster.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/functionaltests/test_software.c b/tests/functionaltests/test_software.c index 00bccf61..c382d290 100644 --- a/tests/functionaltests/test_software.c +++ b/tests/functionaltests/test_software.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/prof_cmocka.h b/tests/prof_cmocka.h new file mode 100644 index 00000000..c8561404 --- /dev/null +++ b/tests/prof_cmocka.h @@ -0,0 +1,5 @@ +#include +#include +#include +#include +#include diff --git a/tests/unittests/chatlog/stub_chatlog.c b/tests/unittests/chatlog/stub_chatlog.c index 2d8eb382..9a53f432 100644 --- a/tests/unittests/chatlog/stub_chatlog.c +++ b/tests/unittests/chatlog/stub_chatlog.c @@ -21,8 +21,7 @@ */ #include -#include -#include +#include "prof_cmocka.h" #include diff --git a/tests/unittests/config/stub_accounts.c b/tests/unittests/config/stub_accounts.c index 981d0180..c805e3ba 100644 --- a/tests/unittests/config/stub_accounts.c +++ b/tests/unittests/config/stub_accounts.c @@ -1,8 +1,4 @@ -#include -#include -#include -#include -#include +#include "prof_cmocka.h" #include "common.h" #include "config/account.h" diff --git a/tests/unittests/database/stub_database.c b/tests/unittests/database/stub_database.c index c1e5c7b3..c3827b46 100644 --- a/tests/unittests/database/stub_database.c +++ b/tests/unittests/database/stub_database.c @@ -21,8 +21,7 @@ */ #include -#include -#include +#include "prof_cmocka.h" #include "database.h" diff --git a/tests/unittests/helpers.c b/tests/unittests/helpers.c index f567bcd5..83de34a0 100644 --- a/tests/unittests/helpers.c +++ b/tests/unittests/helpers.c @@ -1,8 +1,5 @@ -#include -#include -#include #include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/log/stub_log.c b/tests/unittests/log/stub_log.c index f0f67e47..aba5a603 100644 --- a/tests/unittests/log/stub_log.c +++ b/tests/unittests/log/stub_log.c @@ -20,10 +20,8 @@ * */ -#include #include -#include -#include +#include "prof_cmocka.h" #include "log.h" diff --git a/tests/unittests/otr/stub_otr.c b/tests/unittests/otr/stub_otr.c index 291db41c..8069ee7d 100644 --- a/tests/unittests/otr/stub_otr.c +++ b/tests/unittests/otr/stub_otr.c @@ -2,10 +2,7 @@ #include #include -#include -#include -#include -#include +#include "prof_cmocka.h" #include "config/account.h" diff --git a/tests/unittests/test_autocomplete.c b/tests/unittests/test_autocomplete.c index 0e307351..3988aaa4 100644 --- a/tests/unittests/test_autocomplete.c +++ b/tests/unittests/test_autocomplete.c @@ -1,9 +1,5 @@ #include -#include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include "xmpp/contact.h" diff --git a/tests/unittests/test_callbacks.c b/tests/unittests/test_callbacks.c index 678c6415..9796f489 100644 --- a/tests/unittests/test_callbacks.c +++ b/tests/unittests/test_callbacks.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_chat_session.c b/tests/unittests/test_chat_session.c index 2de18c08..86ce0743 100644 --- a/tests/unittests/test_chat_session.c +++ b/tests/unittests/test_chat_session.c @@ -1,10 +1,6 @@ -#include #include -#include -#include -#include +#include "prof_cmocka.h" #include -#include #include "xmpp/chat_session.h" diff --git a/tests/unittests/test_cmd_account.c b/tests/unittests/test_cmd_account.c index 76f5a594..46783820 100644 --- a/tests/unittests/test_cmd_account.c +++ b/tests/unittests/test_cmd_account.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_alias.c b/tests/unittests/test_cmd_alias.c index d23816bd..c86733a2 100644 --- a/tests/unittests/test_cmd_alias.c +++ b/tests/unittests/test_cmd_alias.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_bookmark.c b/tests/unittests/test_cmd_bookmark.c index c77e0bf1..168ce8ce 100644 --- a/tests/unittests/test_cmd_bookmark.c +++ b/tests/unittests/test_cmd_bookmark.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_connect.c b/tests/unittests/test_cmd_connect.c index 98e1884d..7f6d54ea 100644 --- a/tests/unittests/test_cmd_connect.c +++ b/tests/unittests/test_cmd_connect.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_disconnect.c b/tests/unittests/test_cmd_disconnect.c index 227c7fbc..e524577a 100644 --- a/tests/unittests/test_cmd_disconnect.c +++ b/tests/unittests/test_cmd_disconnect.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/unittests/test_cmd_join.c b/tests/unittests/test_cmd_join.c index e933dc89..75440332 100644 --- a/tests/unittests/test_cmd_join.c +++ b/tests/unittests/test_cmd_join.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_otr.c b/tests/unittests/test_cmd_otr.c index 7824cd9d..7c1850df 100644 --- a/tests/unittests/test_cmd_otr.c +++ b/tests/unittests/test_cmd_otr.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_pgp.c b/tests/unittests/test_cmd_pgp.c index 35df812f..71253c49 100644 --- a/tests/unittests/test_cmd_pgp.c +++ b/tests/unittests/test_cmd_pgp.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_presence.c b/tests/unittests/test_cmd_presence.c index 3d157ff1..8d386097 100644 --- a/tests/unittests/test_cmd_presence.c +++ b/tests/unittests/test_cmd_presence.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_rooms.c b/tests/unittests/test_cmd_rooms.c index 0800bf20..ef2e6b48 100644 --- a/tests/unittests/test_cmd_rooms.c +++ b/tests/unittests/test_cmd_rooms.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_roster.c b/tests/unittests/test_cmd_roster.c index d848235b..aadfedc4 100644 --- a/tests/unittests/test_cmd_roster.c +++ b/tests/unittests/test_cmd_roster.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_cmd_sub.c b/tests/unittests/test_cmd_sub.c index 2db13337..c7386112 100644 --- a/tests/unittests/test_cmd_sub.c +++ b/tests/unittests/test_cmd_sub.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_common.c b/tests/unittests/test_common.c index e340fcf3..889b2202 100644 --- a/tests/unittests/test_common.c +++ b/tests/unittests/test_common.c @@ -1,11 +1,7 @@ #include "xmpp/resource.h" #include "common.h" -#include -#include -#include -#include +#include "prof_cmocka.h" #include -#include void replace_one_substr(void** state) diff --git a/tests/unittests/test_contact.c b/tests/unittests/test_contact.c index 849c9bc0..3f6caa12 100644 --- a/tests/unittests/test_contact.c +++ b/tests/unittests/test_contact.c @@ -1,9 +1,6 @@ #include -#include #include -#include -#include -#include +#include "prof_cmocka.h" #include #include "xmpp/contact.h" diff --git a/tests/unittests/test_form.c b/tests/unittests/test_form.c index 88bf9d55..583babf3 100644 --- a/tests/unittests/test_form.c +++ b/tests/unittests/test_form.c @@ -1,8 +1,5 @@ -#include #include -#include -#include -#include +#include "prof_cmocka.h" #include #include "xmpp/form.h" diff --git a/tests/unittests/test_jid.c b/tests/unittests/test_jid.c index 77886e4a..7bc2137e 100644 --- a/tests/unittests/test_jid.c +++ b/tests/unittests/test_jid.c @@ -1,8 +1,4 @@ -#include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include "xmpp/jid.h" diff --git a/tests/unittests/test_keyhandlers.c b/tests/unittests/test_keyhandlers.c index 6d95f0cb..ff7d6a93 100644 --- a/tests/unittests/test_keyhandlers.c +++ b/tests/unittests/test_keyhandlers.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include diff --git a/tests/unittests/test_muc.c b/tests/unittests/test_muc.c index 57fd79e8..bf396619 100644 --- a/tests/unittests/test_muc.c +++ b/tests/unittests/test_muc.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include "xmpp/muc.h" diff --git a/tests/unittests/test_parser.c b/tests/unittests/test_parser.c index 8019097d..2783e8d0 100644 --- a/tests/unittests/test_parser.c +++ b/tests/unittests/test_parser.c @@ -1,8 +1,4 @@ -#include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include "tools/parser.h" diff --git a/tests/unittests/test_plugins_disco.c b/tests/unittests/test_plugins_disco.c index 880a09b1..a21ae94c 100644 --- a/tests/unittests/test_plugins_disco.c +++ b/tests/unittests/test_plugins_disco.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include "plugins/disco.h" diff --git a/tests/unittests/test_preferences.c b/tests/unittests/test_preferences.c index 1eb2ba36..7c662a34 100644 --- a/tests/unittests/test_preferences.c +++ b/tests/unittests/test_preferences.c @@ -1,8 +1,4 @@ -#include -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/test_roster_list.c b/tests/unittests/test_roster_list.c index 185a9c72..7fbaf394 100644 --- a/tests/unittests/test_roster_list.c +++ b/tests/unittests/test_roster_list.c @@ -1,11 +1,7 @@ #include -#include #include -#include -#include -#include +#include "prof_cmocka.h" #include -#include #include "xmpp/contact.h" #include "xmpp/roster_list.h" diff --git a/tests/unittests/test_server_events.c b/tests/unittests/test_server_events.c index fbed077a..4f00fd1b 100644 --- a/tests/unittests/test_server_events.c +++ b/tests/unittests/test_server_events.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 6e31382f..d15177d6 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -3,8 +3,7 @@ #include #include -#include -#include +#include "prof_cmocka.h" #include "ui/window.h" #include "ui/ui.h" diff --git a/tests/unittests/unittests.c b/tests/unittests/unittests.c index 88e1ec98..69fbd4bf 100644 --- a/tests/unittests/unittests.c +++ b/tests/unittests/unittests.c @@ -1,10 +1,7 @@ -#include #include #include #include -#include -#include -#include +#include "prof_cmocka.h" #include #include #include diff --git a/tests/unittests/xmpp/stub_xmpp.c b/tests/unittests/xmpp/stub_xmpp.c index 5af8c5c2..76a072e9 100644 --- a/tests/unittests/xmpp/stub_xmpp.c +++ b/tests/unittests/xmpp/stub_xmpp.c @@ -1,7 +1,4 @@ -#include -#include -#include -#include +#include "prof_cmocka.h" #include "xmpp/xmpp.h" -- 2.49.1 From 75b378cf54b6012a390eb1d68a5ad3d93ab09bdb Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:16:19 +0200 Subject: [PATCH 09/12] Don't use `memchr()` on strings potentially shorter than 4 bytes. When running profanity under Valgrind with slashguard enabled, the following error could occur: ``` [...] ==4021347== Invalid read of size 1 ==4021347== at 0x4851F49: memchr (vg_replace_strmem.c:986) ==4021347== by 0x45CEAD: _inp_slashguard_check (inputwin.c:183) ==4021347== by 0x45CEAD: inp_readline (inputwin.c:225) ==4021347== by 0x431184: prof_run (profanity.c:121) ==4021347== by 0x42C609: main (main.c:176) ==4021347== Address 0xe850883 is 0 bytes after a block of size 3 alloc'd ==4021347== at 0x48477C4: malloc (vg_replace_malloc.c:446) [...] ``` `memchr()` requires the complete memory that shall be searched to be accessible. Using `strchr()` could work for shorter strings, but we only want to search in the first 4 chars. Instead of somehow working around those limitations, simply search manually in the first 4 bytes. Fixes: 3c56b289 ("Add slashguard feature") Signed-off-by: Steffen Jaeckel (cherry picked from commit 7f48452d84c052927b25975052e578d325a147a6) --- src/ui/inputwin.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index 0bb9acbf..ae96e79c 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -180,11 +180,15 @@ _inp_slashguard_check(void) return false; if (!prefs_get_boolean(PREF_SLASH_GUARD)) return false; - if (memchr(inp_line + 1, '/', 3)) { - cons_show("Your text contains a slash in the first 4 characters"); - free(inp_line); - inp_line = NULL; - return true; + size_t n = 1; + while (inp_line[n] != '\0' && n < 4) { + if (inp_line[n] == '/') { + cons_show("Your text contains a slash in the first 4 characters"); + free(inp_line); + inp_line = NULL; + return true; + } + n++; } return false; } -- 2.49.1 From 110b3d27b46ebe201a2d6830a8f5bd21fad345a0 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 10 Sep 2025 14:17:15 +0200 Subject: [PATCH 10/12] Rename issue template Seems like GH changed how the templates work. (cherry picked from commit f1e12a33cf64eddc936a3b9f5e214f0ecb7d375e) --- .github/{ISSUE_TEMPLATE => issue_template.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{ISSUE_TEMPLATE => issue_template.md} (100%) diff --git a/.github/ISSUE_TEMPLATE b/.github/issue_template.md similarity index 100% rename from .github/ISSUE_TEMPLATE rename to .github/issue_template.md -- 2.49.1 From f419e65fadbf28950ec661251f4b66468b2b6fcc Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 10 Sep 2025 14:18:01 +0200 Subject: [PATCH 11/12] Update issue templates According to the new way: https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/about-issue-and-pull-request-templates (cherry picked from commit 5dcbd84f758ac6f9d2eb26c5579421040ba8fe31) --- .github/ISSUE_TEMPLATE/bug_report.md | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..b554ac1d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,44 @@ +--- +name: Bug report +about: Create a report +title: '' +labels: bug +assignees: '' + +--- + + + + + + +## Expected Behavior + + + +## Current Behavior + + + +## Possible Solution + + + +## Steps to Reproduce (for bugs) + + +1. +2. +3. +4. + +## Context + + +## Environment +* Give us the version and build information output generated by `profanity -v` +* If you could not yet build profanity, mention the revision you try to build from +* Operating System/Distribution +* glib version +* libstrophe version +* Some bugs might be due to specific implementation in the server. `/serversoftware example.domain` can be helpful -- 2.49.1 From 9b1cb6ab85db5a1a9bf690439517b9c488d262b2 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 10 Sep 2025 14:20:08 +0200 Subject: [PATCH 12/12] If config keyfile does not exist, create it. Fixes #1911 Alternative to #2056 Signed-off-by: Steffen Jaeckel (cherry picked from commit b12521ca21096c54a1ea2bf1ef67ceae1f6c6133) --- src/common.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/common.c b/src/common.c index 07e4c97b..064eb757 100644 --- a/src/common.c +++ b/src/common.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -199,6 +200,10 @@ load_custom_keyfile(prof_keyfile_t* keyfile, gchar* filename) if (g_file_test(keyfile->filename, G_FILE_TEST_EXISTS)) { g_chmod(keyfile->filename, S_IRUSR | S_IWUSR); + } else { + int fno = g_creat(keyfile->filename, S_IRUSR | S_IWUSR); + if (fno != -1) + g_close(fno, NULL); } return _load_keyfile(keyfile); -- 2.49.1