mirror of
https://git.jabber.space/devs/cproof.git
synced 2026-07-21 22:06:21 +00:00
refactor: optimize hash table iterations and fix security issues #58
- 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:
@@ -149,15 +149,14 @@ callbacks_remove(const char* const plugin_name)
|
||||
{
|
||||
GHashTable* command_hash = g_hash_table_lookup(p_commands, plugin_name);
|
||||
if (command_hash) {
|
||||
GList* commands = g_hash_table_get_keys(command_hash);
|
||||
GList* curr = commands;
|
||||
while (curr) {
|
||||
char* command = curr->data;
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
g_hash_table_iter_init(&iter, command_hash);
|
||||
while (g_hash_table_iter_next(&iter, &key, &value)) {
|
||||
char* command = (char*)key;
|
||||
cmd_ac_remove(command);
|
||||
cmd_ac_remove_help(&command[1]);
|
||||
curr = g_list_next(curr);
|
||||
}
|
||||
g_list_free(commands);
|
||||
}
|
||||
|
||||
g_hash_table_remove(p_commands, plugin_name);
|
||||
@@ -165,13 +164,12 @@ callbacks_remove(const char* const plugin_name)
|
||||
|
||||
GHashTable* tag_to_win_cb_hash = g_hash_table_lookup(p_window_callbacks, plugin_name);
|
||||
if (tag_to_win_cb_hash) {
|
||||
GList* tags = g_hash_table_get_keys(tag_to_win_cb_hash);
|
||||
GList* curr = tags;
|
||||
while (curr) {
|
||||
wins_close_plugin(curr->data);
|
||||
curr = g_list_next(curr);
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
g_hash_table_iter_init(&iter, tag_to_win_cb_hash);
|
||||
while (g_hash_table_iter_next(&iter, &key, &value)) {
|
||||
wins_close_plugin(key);
|
||||
}
|
||||
g_list_free(tags);
|
||||
}
|
||||
|
||||
g_hash_table_remove(p_window_callbacks, plugin_name);
|
||||
|
||||
Reference in New Issue
Block a user