refactor: optimize hash table iterations and fix security issues #58
Some checks failed
CI Code / Check coding style (pull_request) Successful in 38s
CI API Docs / Test Python API Documentation Generation (pull_request) Has been cancelled
CI API Docs / Test C API Documentation Generation (pull_request) Has been cancelled
CI Code / Check spelling (pull_request) Successful in 49s
CI Code / Linux (ubuntu) (pull_request) Successful in 6m22s
CI Code / Linux (debian) (pull_request) Successful in 9m3s
CI Code / Code Coverage (pull_request) Successful in 9m16s
CI Code / Linux (arch) (pull_request) Successful in 11m20s

- refactor(core): replace g_hash_table_get_keys with g_hash_table_iter_init
  * Eliminates temporary GList allocations
  * Improves iteration performance
  * Affected: connection.c, cmd_defs.c, cmd_funcs.c, omemo.c, gpg.c,
    disco.c, form.c, autocompleters.c, capabilities.c, callbacks.c

- fix(xmpp): correct queued_messages loop in connection.c:1031
  * Remove incorrect NULL check that prevented message storage
  * calloc zeros array, causing loop to skip immediately
  * Fixes dropped messages during reconnection with SM enabled

- fix(ui): prevent format string vulnerabilities in cons_show calls
  * Replace cons_show(variable) with cons_show("%s", variable)
  * Protects against format string attacks if variables contain %
  * Updated instances across cmd_funcs.c, connection.c, ox.c,
    console.c, core.c
This commit is contained in:
2025-11-10 18:51:16 +03:00
parent b2ce06923e
commit 58dd89be40
13 changed files with 143 additions and 177 deletions

View File

@@ -171,16 +171,15 @@ caps_get_features(void)
{
GList* result = NULL;
GList* features_as_list = g_hash_table_get_keys(prof_features);
GList* curr = features_as_list;
while (curr) {
result = g_list_append(result, strdup(curr->data));
curr = g_list_next(curr);
GHashTableIter iter;
gpointer key, value;
g_hash_table_iter_init(&iter, prof_features);
while (g_hash_table_iter_next(&iter, &key, &value)) {
result = g_list_append(result, strdup((char*)key));
}
g_list_free(features_as_list);
GList* plugin_features = plugins_get_disco_features();
curr = plugin_features;
GList* curr = plugin_features;
while (curr) {
result = g_list_append(result, strdup(curr->data));
curr = g_list_next(curr);