diff --git a/meson.build b/meson.build index ccec068d5..04ab74d17 100644 --- a/meson.build +++ b/meson.build @@ -65,7 +65,13 @@ if is_debug '-Wunused', '-Wall', '-Wextra', + '-fstack-protector-strong', + '-D_FORTIFY_SOURCE=2', + '-Og' ], language: 'c') + if cc.get_id() == 'gcc' + add_project_arguments('-fanalyzer', language: 'c') + endif endif if cc.get_id() == 'clang' diff --git a/src/chatlog.c b/src/chatlog.c index b51010a93..241ee202e 100644 --- a/src/chatlog.c +++ b/src/chatlog.c @@ -418,7 +418,7 @@ _create_chatlog(const char* const other, const char* const login) GDateTime* now = g_date_time_new_now_local(); auto_char char* filename = _get_log_filename(other, login, now, FALSE); - struct dated_chat_log* new_log = malloc(sizeof(struct dated_chat_log)); + struct dated_chat_log* new_log = g_new0(struct dated_chat_log, 1); new_log->filename = strdup(filename); new_log->date = now; @@ -431,7 +431,7 @@ _create_groupchat_log(const char* const room, const char* const login) GDateTime* now = g_date_time_new_now_local(); auto_char char* filename = _get_log_filename(room, login, now, TRUE); - struct dated_chat_log* new_log = malloc(sizeof(struct dated_chat_log)); + struct dated_chat_log* new_log = g_new0(struct dated_chat_log, 1); new_log->filename = strdup(filename); new_log->date = now; diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index 94c283090..a632ceae3 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -1653,60 +1653,52 @@ cmd_ac_uninit(void) } static void -_filepath_item_free(char** ptr) +_filepath_item_free(gchar** ptr) { - char* item = *ptr; - free(item); + gchar* item = *ptr; + g_free(item); } char* cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean previous) { - unsigned int output_off = 0; - char* tmp = NULL; - // strip command - char* inpcp = (char*)input + strlen(startstr); - while (*inpcp == ' ') { - inpcp++; + char* inpcp_ptr = (char*)input + strlen(startstr); + while (*inpcp_ptr == ' ') { + inpcp_ptr++; } - inpcp = strdup(inpcp); + auto_gchar gchar* inpcp = g_strdup(inpcp_ptr); + if (!inpcp) { + return NULL; + } // strip quotes - if (*inpcp == '"') { - tmp = strrchr(inpcp + 1, '"'); - if (tmp) { - *tmp = '\0'; + if (inpcp[0] == '"') { + char* last_quote = strrchr(inpcp + 1, '"'); + if (last_quote) { + *last_quote = '\0'; } - tmp = strdup(inpcp + 1); - free(inpcp); - inpcp = tmp; - tmp = NULL; + gchar* unquoted = g_strdup(inpcp + 1); + inpcp = unquoted; } - // expand ~ to $HOME - if (inpcp[0] == '~' && inpcp[1] == '/') { - char* home = getenv("HOME"); - if (!home) { - free(inpcp); - return NULL; - } - tmp = g_strdup_printf("%s/%sfoo", home, inpcp + 2); - output_off = strlen(home) + 1; - } else { - tmp = g_strdup_printf("%sfoo", inpcp); - } - free(inpcp); - if (!tmp) { + auto_gchar gchar* expanded = get_expanded_path(inpcp); + if (!expanded) { return NULL; } - char* foofile = strdup(basename(tmp)); - char* directory = strdup(dirname(tmp)); - g_free(tmp); + auto_gchar gchar* foofile = g_path_get_basename(expanded); + auto_gchar gchar* directory = g_path_get_dirname(expanded); + + // If the input ends with a slash, the basename will be "." or "/" + // In that case, we are looking for all files in that directory + gboolean find_all = FALSE; + if (inpcp[strlen(inpcp) - 1] == '/') { + find_all = TRUE; + } - GArray* files = g_array_new(TRUE, FALSE, sizeof(char*)); + GArray* files = g_array_new(TRUE, FALSE, sizeof(gchar*)); g_array_set_clear_func(files, (GDestroyNotify)_filepath_item_free); DIR* d = opendir(directory); @@ -1714,40 +1706,33 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean struct dirent* dir; while ((dir = readdir(d)) != NULL) { - if (strcmp(dir->d_name, ".") == 0) { + if (strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0) { continue; - } else if (strcmp(dir->d_name, "..") == 0) { + } + + // check if it matches prefix + if (!find_all && !g_str_has_prefix(dir->d_name, foofile)) { continue; - } else if (*(dir->d_name) == '.' && *foofile != '.') { - // only show hidden files on explicit request + } + + // only show hidden files on explicit request + if (dir->d_name[0] == '.' && (find_all || foofile[0] != '.')) { continue; } - char* acstring = NULL; - if (output_off) { - tmp = g_strdup_printf("%s/%s", directory, dir->d_name); - if (tmp) { - acstring = g_strdup_printf("~/%s", tmp + output_off); - g_free(tmp); - } - } else if (strcmp(directory, "/") == 0) { + auto_gchar gchar* acstring = NULL; + if (strcmp(directory, "/") == 0) { acstring = g_strdup_printf("/%s", dir->d_name); } else { acstring = g_strdup_printf("%s/%s", directory, dir->d_name); } - if (!acstring) { - g_array_free(files, TRUE); - free(foofile); - free(directory); - return NULL; - } - g_array_append_val(files, acstring); + if (acstring) { + g_array_append_val(files, acstring); + } } closedir(d); } - free(directory); - free(foofile); autocomplete_update(filepath_ac, (char**)files->data); g_array_free(files, TRUE); diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index d30912793..ce39f3c5c 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -2976,8 +2976,14 @@ command_docgen(void) cmds = g_list_insert_sorted(cmds, (gpointer)pcmd, (GCompareFunc)_cmp_command); } - FILE* toc_fragment = fopen("toc_fragment.html", "w"); - FILE* main_fragment = fopen("main_fragment.html", "w"); + auto_FILE FILE* toc_fragment = fopen("toc_fragment.html", "w"); + auto_FILE FILE* main_fragment = fopen("main_fragment.html", "w"); + + if (!toc_fragment || !main_fragment) { + printf("\nError opening html files: %s.\n", strerror(errno)); + g_list_free(cmds); + return; + } fputs("\n", toc_fragment); - fclose(toc_fragment); - fclose(main_fragment); printf("\nProcessed %d commands.\n\n", g_list_length(cmds)); g_list_free(cmds); } diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index c8ab5a031..bfdf636ed 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -154,10 +154,11 @@ cmd_process_input(ProfWin* window, char* inp) if (inp[0] == '/') { auto_char char* inp_cpy = strdup(inp); char* command = strtok(inp_cpy, " "); - char* second_word = strtok(NULL, " "); - gboolean wants_help = second_word ? strcmp(second_word, "help") == 0 : FALSE; + if (!command) { + return TRUE; + } char* question_mark = strchr(command, '?'); - if (wants_help || question_mark) { + if (question_mark) { *question_mark = '\0'; auto_gchar gchar* fakeinp = g_strdup_printf("/help %s", command + 1); if (fakeinp) { @@ -206,7 +207,7 @@ cmd_tls_certpath(ProfWin* window, const char* const command, gchar** args) cons_show("Certificate path defaulted to finding system certpath."); return TRUE; } else if (args[1] == NULL) { - auto_char char* path = prefs_get_tls_certpath(); + auto_gchar gchar* path = prefs_get_tls_certpath(); if (path) { cons_show("Trusted certificate path: %s", path); } else { @@ -385,7 +386,7 @@ cmd_connect(ProfWin* window, const char* const command, gchar** args) } } - auto_char char* jid = NULL; + auto_gchar gchar* jid = NULL; auto_char char* user = strdup(user_orig); // connect with account @@ -1074,30 +1075,19 @@ cmd_script(ProfWin* window, const char* const command, gchar** args) return TRUE; } -/* escape a string into csv and write it to the file descriptor */ -static int -_writecsv(int fd, const char* const str) +static void +_append_csv_escaped(GString* buffer, const char* const str) { - if (!str) - return 0; - size_t len = strlen(str); + if (!str) { + return; + } - auto_char char* s = malloc(2 * len * sizeof(char)); - char* c = s; - for (size_t i = 0; i < strlen(str); i++) { - if (str[i] != '"') - *c++ = str[i]; - else { - *c++ = '"'; - *c++ = '"'; - len++; + for (const char* p = str; *p; p++) { + if (*p == '"') { + g_string_append_c(buffer, '"'); } + g_string_append_c(buffer, *p); } - if (-1 == write(fd, s, len)) { - cons_show("error: failed to write '%s' to the requested file: %s", s, strerror(errno)); - return -1; - } - return 0; } gboolean @@ -1109,62 +1099,45 @@ cmd_export(ProfWin* window, const char* const command, gchar** args) cons_show("You are not currently connected."); cons_show(""); return TRUE; - } else { - int fd; - GSList* list = NULL; - auto_char char* path = get_expanded_path(args[0]); + } - fd = open(path, O_WRONLY | O_CREAT, 00600); + GSList* list = roster_get_contacts(ROSTER_ORD_NAME); + if (!list) { + cons_show("No contacts in roster."); + cons_show(""); + return TRUE; + } - if (-1 == fd) { - cons_show("error: cannot open %s: %s", args[0], strerror(errno)); - cons_show(""); - return TRUE; - } + auto_gchar gchar* path = get_expanded_path(args[0]); + GString* buffer = g_string_new("jid,name\n"); - if (-1 == write(fd, "jid,name\n", strlen("jid,name\n"))) - goto write_error; + GSList* curr = list; + while (curr) { + PContact contact = curr->data; + const gchar* jid = p_contact_barejid(contact); + const gchar* name = p_contact_name(contact); - list = roster_get_contacts(ROSTER_ORD_NAME); - if (list) { - GSList* curr = list; - while (curr) { - PContact contact = curr->data; - const char* jid = p_contact_barejid(contact); - const char* name = p_contact_name(contact); - - /* write the data to the file */ - if (-1 == write(fd, "\"", 1)) - goto write_error; - if (-1 == _writecsv(fd, jid)) - goto write_error; - if (-1 == write(fd, "\",\"", 3)) - goto write_error; - if (-1 == _writecsv(fd, name)) - goto write_error; - if (-1 == write(fd, "\"\n", 2)) - goto write_error; - - /* loop */ - curr = g_slist_next(curr); - } - cons_show("Contacts exported successfully"); - cons_show(""); - } else { - cons_show("No contacts in roster."); - cons_show(""); - } + g_string_append_c(buffer, '"'); + _append_csv_escaped(buffer, jid); + g_string_append(buffer, "\",\""); + _append_csv_escaped(buffer, name); + g_string_append(buffer, "\"\n"); - g_slist_free(list); - close(fd); - return TRUE; -write_error: - cons_show("error: write failed: %s", strerror(errno)); - cons_show(""); - g_slist_free(list); - close(fd); - return TRUE; + curr = g_slist_next(curr); + } + + auto_gerror GError* error = NULL; + if (!g_file_set_contents(path, buffer->str, buffer->len, &error)) { + cons_show_error("error: cannot save %s: %s", args[0], error->message); + } else { + g_chmod(path, S_IRUSR | S_IWUSR); + cons_show("Contacts exported successfully"); } + + g_string_free(buffer, TRUE); + g_slist_free(list); + + return TRUE; } gboolean @@ -4897,6 +4870,11 @@ cmd_sendfile(ProfWin* window, const char* const command, gchar** args) } FILE* fh = fdopen(fd, "rb"); + if (!fh) { + cons_show_error("Unable to open file descriptor for '%s'.", filename); + close(fd); + goto out; + } if (omemo_enabled) { #ifdef HAVE_OMEMO @@ -4906,12 +4884,23 @@ cmd_sendfile(ProfWin* window, const char* const command, gchar** args) if (err != NULL) { cons_show_error(err); win_println(window, THEME_ERROR, "-", err); + if (fh) { + fclose(fh); + } goto out; } #endif } - HTTPUpload* upload = malloc(sizeof(HTTPUpload)); + HTTPUpload* upload = g_new0(HTTPUpload, 1); + if (!upload) { + cons_show_error("Memory allocation failed."); + if (fh) { + fclose(fh); + } + goto out; + } + upload->window = window; upload->filename = strdup(filename); @@ -4919,6 +4908,17 @@ cmd_sendfile(ProfWin* window, const char* const command, gchar** args) upload->filesize = file_size(fd); upload->mime_type = file_mime_type(filename); + if (!upload->filename || !upload->mime_type) { + cons_show_error("Memory allocation failed."); + if (fh) { + fclose(fh); + } + free(upload->filename); + free(upload->mime_type); + free(upload); + goto out; + } + if (alt_scheme != NULL) { upload->alt_scheme = strdup(alt_scheme); } else { @@ -7317,7 +7317,7 @@ cmd_pgp(ProfWin* window, const char* const command, gchar** args) account_free(account); return TRUE; } - auto_char char* pubkey = p_gpg_get_pubkey(account->pgp_keyid); + auto_gchar gchar* pubkey = p_gpg_get_pubkey(account->pgp_keyid); if (pubkey == NULL) { cons_show_error("Couldn't get your PGP public key. Please, check error logs."); account_free(account); @@ -8714,8 +8714,8 @@ cmd_omemo_trust(ProfWin* window, const char* const command, gchar** args) return TRUE; } - char* fingerprint; - char* barejid; + gchar* fingerprint; + gchar* barejid; /* Contact not provided */ if (!args[2]) { @@ -8731,7 +8731,7 @@ cmd_omemo_trust(ProfWin* window, const char* const command, gchar** args) barejid = chatwin->barejid; } else { fingerprint = args[2]; - char* contact = args[1]; + gchar* contact = args[1]; barejid = roster_barejid_from_name(contact); if (barejid == NULL) { barejid = contact; @@ -8740,7 +8740,7 @@ cmd_omemo_trust(ProfWin* window, const char* const command, gchar** args) omemo_trust(barejid, fingerprint); - auto_char char* unformatted_fingerprint = malloc(strlen(fingerprint)); + auto_gchar gchar* unformatted_fingerprint = g_malloc(strlen(fingerprint) + 1); int i; int j; for (i = 0, j = 0; fingerprint[i] != '\0'; i++) { @@ -8781,8 +8781,8 @@ cmd_omemo_untrust(ProfWin* window, const char* const command, gchar** args) return TRUE; } - char* fingerprint; - char* barejid; + gchar* fingerprint; + gchar* barejid; /* Contact not provided */ if (!args[2]) { @@ -8807,7 +8807,7 @@ cmd_omemo_untrust(ProfWin* window, const char* const command, gchar** args) omemo_untrust(barejid, fingerprint); - auto_char char* unformatted_fingerprint = malloc(strlen(fingerprint)); + auto_gchar gchar* unformatted_fingerprint = g_malloc(strlen(fingerprint) + 1); int i, j; for (i = 0, j = 0; fingerprint[i] != '\0'; i++) { if (!g_ascii_isxdigit(fingerprint[i])) { @@ -9229,7 +9229,7 @@ _url_aesgcm_method(ProfWin* window, const char* cmd_template, gchar* url, gchar* auto_gchar gchar* filename = _prepare_filename(window, url, path); if (!filename) return; - AESGCMDownload* download = calloc(1, sizeof(AESGCMDownload)); + AESGCMDownload* download = g_new0(AESGCMDownload, 1); download->id = get_random_string(4); download->url = strdup(url); download->filename = strdup(filename); @@ -9251,7 +9251,7 @@ _download_install_plugin(ProfWin* window, gchar* url, gchar* path) auto_gchar gchar* filename = _prepare_filename(window, url, path); if (!filename) return FALSE; - HTTPDownload* download = calloc(1, sizeof(HTTPDownload)); + HTTPDownload* download = g_new0(HTTPDownload, 1); download->id = get_random_string(4); download->url = strdup(url); download->filename = strdup(filename); @@ -9270,7 +9270,7 @@ _url_http_method(ProfWin* window, const char* cmd_template, gchar* url, gchar* p auto_gchar gchar* filename = _prepare_filename(window, url, path); if (!filename) return; - HTTPDownload* download = calloc(1, sizeof(HTTPDownload)); + HTTPDownload* download = g_new0(HTTPDownload, 1); download->id = get_random_string(4); download->url = strdup(url); download->filename = strdup(filename); @@ -9678,7 +9678,7 @@ cmd_vcard_add(ProfWin* window, const char* const command, gchar** args) return TRUE; } - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { cons_show_error("Memory allocation failed."); return TRUE; diff --git a/src/common.c b/src/common.c index 52aa0ee6d..42b475960 100644 --- a/src/common.c +++ b/src/common.c @@ -543,6 +543,9 @@ char* strip_arg_quotes(const char* const input) { char* unquoted = strdup(input); + if (unquoted == NULL) { + return NULL; + } // Remove starting quote if it exists if (strchr(unquoted, '"')) { @@ -679,15 +682,15 @@ get_file_paths_recursive(const char* path, GSList** contents) } } -char* +gchar* get_random_string(int length) { GRand* prng; - char* rand; - char alphabet[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + gchar* rand; + gchar alphabet[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int endrange = sizeof(alphabet) - 1; - rand = calloc(length + 1, sizeof(char)); + rand = g_malloc0(length + 1); prng = g_rand_new(); diff --git a/src/common.h b/src/common.h index 6d4c0007d..1f83c817c 100644 --- a/src/common.h +++ b/src/common.h @@ -206,7 +206,7 @@ int is_regular_file(const char* path); int is_dir(const char* path); void get_file_paths_recursive(const char* directory, GSList** contents); -char* get_random_string(int length); +gchar* get_random_string(int length); gboolean call_external(gchar** argv); gchar** format_call_external_argv(const char* template, const char* url, const char* filename); diff --git a/src/config/account.c b/src/config/account.c index 296b831e7..dd6eb6adb 100644 --- a/src/config/account.c +++ b/src/config/account.c @@ -39,6 +39,7 @@ #include #include #include +#include #include @@ -59,7 +60,7 @@ account_new(gchar* name, gchar* jid, gchar* password, gchar* eval_password, gboo gchar* startscript, gchar* theme, gchar* tls_policy, gchar* auth_policy, gchar* client, int max_sessions) { - ProfAccount* new_account = calloc(1, sizeof(ProfAccount)); + ProfAccount* new_account = g_new0(ProfAccount, 1); new_account->name = name; @@ -144,13 +145,13 @@ account_new(gchar* name, gchar* jid, gchar* password, gchar* eval_password, gboo return new_account; } -char* +gchar* account_create_connect_jid(ProfAccount* account) { if (account->resource) { return create_fulljid(account->jid, account->resource); } else { - return strdup(account->jid); + return g_strdup(account->jid); } } @@ -160,53 +161,31 @@ account_eval_password(ProfAccount* account) assert(account != NULL); assert(account->eval_password != NULL); - errno = 0; + gchar* stdout_buf = NULL; + GError* error = NULL; + gint exit_status = 0; - FILE* stream = popen(account->eval_password, "r"); - if (stream == NULL) { - const char* errmsg = strerror(errno); - if (errmsg) { - log_error("Could not execute `eval_password` command (%s).", - errmsg); - } else { - log_error("Failed to allocate memory for `eval_password` command."); - } - return FALSE; - } - - account->password = g_malloc(READ_BUF_SIZE); - if (!account->password) { - log_error("Failed to allocate enough memory to read `eval_password` " - "output."); - return FALSE; - } - - account->password = fgets(account->password, READ_BUF_SIZE, stream); - if (!account->password) { - log_error("Failed to read password from stream."); + if (!g_spawn_command_line_sync(account->eval_password, &stdout_buf, NULL, &exit_status, &error)) { + log_error("Failed to execute `eval_password` command: %s", error->message); + g_error_free(error); return FALSE; } - int exit_status = pclose(stream); - if (exit_status > 0) { - log_error("Command for `eval_password` returned error status (%s).", - exit_status); - return FALSE; - } else if (exit_status < 0) { - log_error("Failed to close stream for `eval_password` command output " - "(%s).", - strerror(errno)); - return FALSE; - }; - - // Remove leading and trailing whitespace from output. - g_strstrip(account->password); - if (!account->password) { - log_error("Empty password returned by `eval_password` command."); + if (WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == 0) { + account->password = stdout_buf; + g_strstrip(account->password); + if (account->password[0] == '\0') { + log_error("Empty password returned by `eval_password` command."); + g_free(account->password); + account->password = NULL; + return FALSE; + } + return TRUE; + } else { + log_error("`eval_password` command failed with status %d", exit_status); + g_free(stdout_buf); return FALSE; } - - return TRUE; } void diff --git a/src/config/account.h b/src/config/account.h index e8bda9277..c6d15b46f 100644 --- a/src/config/account.h +++ b/src/config/account.h @@ -84,7 +84,7 @@ ProfAccount* account_new(gchar* name, gchar* jid, gchar* password, gchar* eval_p GList* ox_enabled, GList* pgp_enabled, gchar* pgp_keyid, gchar* startscript, gchar* theme, gchar* tls_policy, gchar* auth_policy, gchar* client, int max_sessions); -char* account_create_connect_jid(ProfAccount* account); +gchar* account_create_connect_jid(ProfAccount* account); gboolean account_eval_password(ProfAccount* account); void account_free(ProfAccount* account); void account_set_server(ProfAccount* account, const char* server); diff --git a/src/config/preferences.c b/src/config/preferences.c index 93eed0faf..b6a6ed5b7 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -78,10 +78,10 @@ static Autocomplete boolean_choice_ac; static Autocomplete room_trigger_ac; static void _save_prefs(void); -static const char* _get_group(preference_t pref); -static const char* _get_key(preference_t pref); +static const gchar* _get_group(preference_t pref); +static const gchar* _get_key(preference_t pref); static gboolean _get_default_boolean(preference_t pref); -static char* _get_default_string(preference_t pref); +static gchar* _get_default_string(preference_t pref); static void _prefs_load(void) @@ -110,7 +110,7 @@ _prefs_load(void) // migrate pre 0.5.0 time settings if (g_key_file_has_key(prefs, PREF_GROUP_UI, "time", NULL)) { auto_gchar gchar* time = g_key_file_get_string(prefs, PREF_GROUP_UI, "time", NULL); - char* val = time ? time : "off"; + gchar* val = time ? time : "off"; g_key_file_set_string(prefs, PREF_GROUP_UI, "time.console", val); g_key_file_set_string(prefs, PREF_GROUP_UI, "time.chat", val); g_key_file_set_string(prefs, PREF_GROUP_UI, "time.muc", val); @@ -179,7 +179,7 @@ _prefs_load(void) if (values && !g_key_file_has_key(prefs, PREF_GROUP_EXECUTABLES, "url.open.cmd", NULL)) { // First value in array is `require_save` option -- we ignore that // one as there is no such option anymore. - char* executable = values[1]; + gchar* executable = values[1]; g_key_file_set_string(prefs, PREF_GROUP_EXECUTABLES, "url.open.cmd", executable); g_key_file_set_comment(prefs, PREF_GROUP_EXECUTABLES, "url.open.cmd", " Migrated from url.open.cmd[DEF]. `require_save` option has been removed in v0.10 and was discarded.", NULL); @@ -275,7 +275,7 @@ prefs_reload(void) } void -prefs_load(const char* config_file) +prefs_load(const gchar* config_file) { if (config_file == NULL) { load_config_keyfile(&prefs_prof_keyfile, FILE_PROFRC); @@ -288,7 +288,7 @@ prefs_load(const char* config_file) } static void -prefs_changes_print(const char* key, const char* newval, const char* oldval, gboolean* banner_shown) +prefs_changes_print(const gchar* key, const gchar* newval, const gchar* oldval, gboolean* banner_shown) { #define PREFS_CHANGES_FORMAT_STRING "%-32s | %-20s | %-20s" if (!*banner_shown) { @@ -302,7 +302,7 @@ prefs_changes_print(const char* key, const char* newval, const char* oldval, gbo void prefs_changes(void) { - const char* undef = ""; + const gchar* undef = ""; prof_keyfile_t saved; if (!load_custom_keyfile(&saved, g_strdup(prefs_prof_keyfile.filename))) return; @@ -374,7 +374,7 @@ prefs_close(void) } gchar* -prefs_autocomplete_boolean_choice(const char* const prefix, gboolean previous, void* context) +prefs_autocomplete_boolean_choice(const gchar* const prefix, gboolean previous, void* context) { return autocomplete_complete(boolean_choice_ac, prefix, TRUE, previous); } @@ -386,7 +386,7 @@ prefs_reset_boolean_choice(void) } gchar* -prefs_autocomplete_room_trigger(const char* const prefix, gboolean previous, void* context) +prefs_autocomplete_room_trigger(const gchar* const prefix, gboolean previous, void* context) { return autocomplete_complete(room_trigger_ac, prefix, TRUE, previous); } @@ -412,7 +412,7 @@ prefs_do_chat_notify(gboolean current_win) } GList* -prefs_message_get_triggers(const char* const message) +prefs_message_get_triggers(const gchar* const message) { GList* result = NULL; @@ -431,8 +431,8 @@ prefs_message_get_triggers(const char* const message) } gboolean -prefs_do_room_notify(gboolean current_win, const char* const roomjid, const char* const mynick, - const char* const theirnick, const char* const message, gboolean mention, gboolean trigger_found) +prefs_do_room_notify(gboolean current_win, const gchar* const roomjid, const gchar* const mynick, + const gchar* const theirnick, const gchar* const message, gboolean mention, gboolean trigger_found) { if (g_strcmp0(mynick, theirnick) == 0) { return FALSE; @@ -481,7 +481,7 @@ prefs_do_room_notify(gboolean current_win, const char* const roomjid, const char } gboolean -prefs_do_room_notify_mention(const char* const roomjid, int unread, gboolean mention, gboolean trigger) +prefs_do_room_notify_mention(const gchar* const roomjid, int unread, gboolean mention, gboolean trigger) { gboolean notify_room = FALSE; if (g_key_file_has_key(prefs, roomjid, "notify", NULL)) { @@ -517,61 +517,61 @@ prefs_do_room_notify_mention(const char* const roomjid, int unread, gboolean men } void -prefs_set_room_notify(const char* const roomjid, gboolean value) +prefs_set_room_notify(const gchar* const roomjid, gboolean value) { g_key_file_set_boolean(prefs, roomjid, "notify", value); } void -prefs_set_room_notify_mention(const char* const roomjid, gboolean value) +prefs_set_room_notify_mention(const gchar* const roomjid, gboolean value) { g_key_file_set_boolean(prefs, roomjid, "notify.mention", value); } void -prefs_set_room_notify_trigger(const char* const roomjid, gboolean value) +prefs_set_room_notify_trigger(const gchar* const roomjid, gboolean value) { g_key_file_set_boolean(prefs, roomjid, "notify.trigger", value); } gboolean -prefs_has_room_notify(const char* const roomjid) +prefs_has_room_notify(const gchar* const roomjid) { return g_key_file_has_key(prefs, roomjid, "notify", NULL); } gboolean -prefs_has_room_notify_mention(const char* const roomjid) +prefs_has_room_notify_mention(const gchar* const roomjid) { return g_key_file_has_key(prefs, roomjid, "notify.mention", NULL); } gboolean -prefs_has_room_notify_trigger(const char* const roomjid) +prefs_has_room_notify_trigger(const gchar* const roomjid) { return g_key_file_has_key(prefs, roomjid, "notify.trigger", NULL); } gboolean -prefs_get_room_notify(const char* const roomjid) +prefs_get_room_notify(const gchar* const roomjid) { return g_key_file_get_boolean(prefs, roomjid, "notify", NULL); } gboolean -prefs_get_room_notify_mention(const char* const roomjid) +prefs_get_room_notify_mention(const gchar* const roomjid) { return g_key_file_get_boolean(prefs, roomjid, "notify.mention", NULL); } gboolean -prefs_get_room_notify_trigger(const char* const roomjid) +prefs_get_room_notify_trigger(const gchar* const roomjid) { return g_key_file_get_boolean(prefs, roomjid, "notify.trigger", NULL); } gboolean -prefs_reset_room_notify(const char* const roomjid) +prefs_reset_room_notify(const gchar* const roomjid) { if (g_key_file_has_group(prefs, roomjid)) { g_key_file_remove_group(prefs, roomjid, NULL); @@ -584,8 +584,8 @@ prefs_reset_room_notify(const char* const roomjid) gboolean prefs_get_boolean(preference_t pref) { - const char* group = _get_group(pref); - const char* key = _get_key(pref); + const gchar* group = _get_group(pref); + const gchar* key = _get_key(pref); gboolean def = _get_default_boolean(pref); if (!g_key_file_has_key(prefs, group, key, NULL)) { @@ -598,8 +598,8 @@ prefs_get_boolean(preference_t pref) void prefs_set_boolean(preference_t pref, gboolean value) { - const char* group = _get_group(pref); - const char* key = _get_key(pref); + const gchar* group = _get_group(pref); + const gchar* key = _get_key(pref); g_key_file_set_boolean(prefs, group, key, value); } @@ -614,9 +614,9 @@ prefs_set_boolean(preference_t pref, gboolean value) gchar* prefs_get_string(preference_t pref) { - const char* group = _get_group(pref); - const char* key = _get_key(pref); - char* def = _get_default_string(pref); + const gchar* group = _get_group(pref); + const gchar* key = _get_key(pref); + gchar* def = _get_default_string(pref); gchar* result = g_key_file_get_string(prefs, group, key, NULL); @@ -643,9 +643,9 @@ prefs_get_string(preference_t pref) gchar* prefs_get_string_with_locale(preference_t pref, gchar* locale) { - const char* group = _get_group(pref); - const char* key = _get_key(pref); - char* def = _get_default_string(pref); + const gchar* group = _get_group(pref); + const gchar* key = _get_key(pref); + gchar* def = _get_default_string(pref); gchar* result = g_key_file_get_locale_string(prefs, group, key, locale, NULL); @@ -674,8 +674,8 @@ prefs_get_string_with_locale(preference_t pref, gchar* locale) void prefs_set_string(preference_t pref, const gchar* new_value) { - const char* group = _get_group(pref); - const char* key = _get_key(pref); + const gchar* group = _get_group(pref); + const gchar* key = _get_key(pref); if (new_value == NULL) { g_key_file_remove_key(prefs, group, key, NULL); } else { @@ -684,10 +684,10 @@ prefs_set_string(preference_t pref, const gchar* new_value) } void -prefs_set_string_with_option(preference_t pref, char* option, char* value) +prefs_set_string_with_option(preference_t pref, gchar* option, gchar* value) { - const char* group = _get_group(pref); - const char* key = _get_key(pref); + const gchar* group = _get_group(pref); + const gchar* key = _get_key(pref); if (value == NULL) { g_key_file_remove_key(prefs, group, key, NULL); } else { @@ -696,10 +696,10 @@ prefs_set_string_with_option(preference_t pref, char* option, char* value) } void -prefs_set_string_list_with_option(preference_t pref, char* option, const gchar* const* values) +prefs_set_string_list_with_option(preference_t pref, gchar* option, const gchar* const* values) { - const char* group = _get_group(pref); - const char* key = _get_key(pref); + const gchar* group = _get_group(pref); + const gchar* key = _get_key(pref); if (values == NULL || *values == NULL) { if (g_strcmp0(option, "*") == 0) { g_key_file_set_string_list(prefs, group, key, NULL, 0); @@ -719,11 +719,11 @@ prefs_set_string_list_with_option(preference_t pref, char* option, const gchar* } } -char* +gchar* prefs_get_tls_certpath(void) { - const char* group = _get_group(PREF_TLS_CERTPATH); - const char* key = _get_key(PREF_TLS_CERTPATH); + const gchar* group = _get_group(PREF_TLS_CERTPATH); + const gchar* key = _get_key(PREF_TLS_CERTPATH); auto_gchar gchar* setting = g_key_file_get_string(prefs, group, key, NULL); @@ -751,7 +751,7 @@ prefs_get_tls_certpath(void) return NULL; } - char* result = strdup(setting); + gchar* result = g_strdup(setting); return result; } @@ -955,14 +955,14 @@ prefs_get_plugins(void) } void -prefs_add_plugin(const char* const name) +prefs_add_plugin(const gchar* const name) { conf_string_list_add(prefs, PREF_GROUP_PLUGINS, "load", name); _save_prefs(); } void -prefs_remove_plugin(const char* const name) +prefs_remove_plugin(const gchar* const name) { conf_string_list_remove(prefs, PREF_GROUP_PLUGINS, "load", name); _save_prefs(); @@ -996,7 +996,7 @@ prefs_get_occupants_char(void) } void -prefs_set_occupants_char(char* ch) +prefs_set_occupants_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "occupants.char", ch); @@ -1041,7 +1041,7 @@ prefs_get_occupants_header_char(void) } void -prefs_set_occupants_header_char(char* ch) +prefs_set_occupants_header_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "occupants.header.char", ch); @@ -1075,7 +1075,7 @@ prefs_get_roster_size(void) } static gchar* -_prefs_get_encryption_char(const char* const ch, const char* const pref_group, const char* const key) +_prefs_get_encryption_char(const gchar* const ch, const gchar* const pref_group, const gchar* const key) { gchar* result = NULL; @@ -1090,7 +1090,7 @@ _prefs_get_encryption_char(const char* const ch, const char* const pref_group, c } static gboolean -_prefs_set_encryption_char(const char* const ch, const char* const pref_group, const char* const key) +_prefs_set_encryption_char(const gchar* const ch, const gchar* const pref_group, const gchar* const key) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, pref_group, key, ch); @@ -1108,7 +1108,7 @@ prefs_get_otr_char(void) } gboolean -prefs_set_otr_char(char* ch) +prefs_set_otr_char(gchar* ch) { return _prefs_set_encryption_char(ch, PREF_GROUP_OTR, "otr.char"); } @@ -1120,7 +1120,7 @@ prefs_get_pgp_char(void) } gboolean -prefs_set_pgp_char(char* ch) +prefs_set_pgp_char(gchar* ch) { return _prefs_set_encryption_char(ch, PREF_GROUP_PGP, "pgp.char"); } @@ -1132,7 +1132,7 @@ prefs_get_ox_char(void) } gboolean -prefs_set_ox_char(char* ch) +prefs_set_ox_char(gchar* ch) { return _prefs_set_encryption_char(ch, PREF_GROUP_OX, "ox.char"); } @@ -1144,7 +1144,7 @@ prefs_get_omemo_char(void) } gboolean -prefs_set_omemo_char(char* ch) +prefs_set_omemo_char(gchar* ch) { return _prefs_set_encryption_char(ch, PREF_GROUP_OMEMO, "omemo.char"); } @@ -1156,7 +1156,7 @@ prefs_get_roster_header_char(void) } void -prefs_set_roster_header_char(char* ch) +prefs_set_roster_header_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.header.char", ch); @@ -1178,7 +1178,7 @@ prefs_get_roster_contact_char(void) } void -prefs_set_roster_contact_char(char* ch) +prefs_set_roster_contact_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.contact.char", ch); @@ -1200,7 +1200,7 @@ prefs_get_roster_resource_char(void) } void -prefs_set_roster_resource_char(char* ch) +prefs_set_roster_resource_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.resource.char", ch); @@ -1222,7 +1222,7 @@ prefs_get_roster_private_char(void) } void -prefs_set_roster_private_char(char* ch) +prefs_set_roster_private_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.private.char", ch); @@ -1244,7 +1244,7 @@ prefs_get_roster_room_char(void) } void -prefs_set_roster_room_char(char* ch) +prefs_set_roster_room_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.rooms.char", ch); @@ -1266,7 +1266,7 @@ prefs_get_roster_room_private_char(void) } void -prefs_set_roster_room_private_char(char* ch) +prefs_set_roster_room_private_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.rooms.private.char", ch); @@ -1353,7 +1353,7 @@ prefs_get_correction_char(void) } void -prefs_set_correction_char(char* ch) +prefs_set_correction_char(gchar* ch) { if (g_utf8_strlen(ch, 4) == 1) { g_key_file_set_string(prefs, PREF_GROUP_UI, "correction.char", ch); @@ -1363,7 +1363,7 @@ prefs_set_correction_char(char* ch) } gboolean -prefs_add_room_notify_trigger(const char* const text) +prefs_add_room_notify_trigger(const gchar* const text) { gboolean res = conf_string_list_add(prefs, PREF_GROUP_NOTIFICATIONS, "room.trigger.list", text); @@ -1375,7 +1375,7 @@ prefs_add_room_notify_trigger(const char* const text) } gboolean -prefs_remove_room_notify_trigger(const char* const text) +prefs_remove_room_notify_trigger(const gchar* const text) { gboolean res = conf_string_list_remove(prefs, PREF_GROUP_NOTIFICATIONS, "room.trigger.list", text); _save_prefs(); @@ -1404,7 +1404,7 @@ prefs_get_room_notify_triggers(void) ProfWinPlacement* prefs_create_profwin_placement(int titlebar, int mainwin, int statusbar, int inputwin) { - ProfWinPlacement* placement = malloc(sizeof(ProfWinPlacement)); + ProfWinPlacement* placement = g_new0(ProfWinPlacement, 1); placement->titlebar_pos = titlebar; placement->mainwin_pos = mainwin; placement->statusbar_pos = statusbar; @@ -1695,7 +1695,7 @@ prefs_inputwin_pos_down(void) } gboolean -prefs_add_alias(const char* const name, const char* const value) +prefs_add_alias(const gchar* const name, const gchar* const value) { if (g_key_file_has_key(prefs, PREF_GROUP_ALIAS, name, NULL)) { return FALSE; @@ -1706,13 +1706,13 @@ prefs_add_alias(const char* const name, const char* const value) } gchar* -prefs_get_alias(const char* const name) +prefs_get_alias(const gchar* const name) { return g_key_file_get_string(prefs, PREF_GROUP_ALIAS, name, NULL); } gboolean -prefs_remove_alias(const char* const name) +prefs_remove_alias(const gchar* const name) { if (!g_key_file_has_key(prefs, PREF_GROUP_ALIAS, name, NULL)) { return FALSE; @@ -1742,13 +1742,13 @@ prefs_get_aliases(void) auto_gcharv gchar** keys = g_key_file_get_keys(prefs, PREF_GROUP_ALIAS, &len, NULL); for (gsize i = 0; i < len; i++) { - char* name = keys[i]; + gchar* name = keys[i]; auto_gchar gchar* value = g_key_file_get_string(prefs, PREF_GROUP_ALIAS, name, NULL); if (value) { - ProfAlias* alias = malloc(sizeof(struct prof_alias_t)); - alias->name = strdup(name); - alias->value = strdup(value); + ProfAlias* alias = g_new0(struct prof_alias_t, 1); + alias->name = g_strdup(name); + alias->value = g_strdup(value); result = g_list_insert_sorted(result, alias, (GCompareFunc)_alias_cmp); } @@ -1761,9 +1761,9 @@ prefs_get_aliases(void) void _free_alias(ProfAlias* alias) { - FREE_SET_NULL(alias->name); - FREE_SET_NULL(alias->value); - FREE_SET_NULL(alias); + GFREE_SET_NULL(alias->name); + GFREE_SET_NULL(alias->value); + GFREE_SET_NULL(alias); } void @@ -1781,7 +1781,7 @@ _save_prefs(void) // get the preference group for a specific preference // for example the PREF_BEEP setting ("beep" in .profrc, see _get_key) belongs // to the [ui] section. -static const char* +static const gchar* _get_group(preference_t pref) { switch (pref) { @@ -1942,7 +1942,7 @@ _get_group(preference_t pref) // get the key used in .profrc for the preference // for example the PREF_AUTOAWAY_MODE maps to "autoaway.mode" in .profrc -static const char* +static const gchar* _get_key(preference_t pref) { switch (pref) { @@ -2283,7 +2283,7 @@ _get_default_boolean(preference_t pref) // the default setting for a string type preference // if it is not specified in .profrc -static char* +static gchar* _get_default_string(preference_t pref) { switch (pref) { diff --git a/src/config/preferences.h b/src/config/preferences.h index eeb2d4bb9..8c23c84dc 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -203,16 +203,16 @@ typedef struct prof_winplacement_t int inputwin_pos; } ProfWinPlacement; -void prefs_load(const char* config_file); +void prefs_load(const gchar* config_file); void prefs_changes(void); void prefs_save(void); void prefs_close(void); void prefs_reload(void); -gchar* prefs_autocomplete_boolean_choice(const char* const prefix, gboolean previous, void* context); +gchar* prefs_autocomplete_boolean_choice(const gchar* const prefix, gboolean previous, void* context); void prefs_reset_boolean_choice(void); -gchar* prefs_autocomplete_room_trigger(const char* const prefix, gboolean previous, void* context); +gchar* prefs_autocomplete_room_trigger(const gchar* const prefix, gboolean previous, void* context); void prefs_reset_room_trigger_ac(void); gint prefs_get_gone(void); @@ -249,42 +249,42 @@ gint prefs_get_autoxa_time(void); void prefs_set_autoxa_time(gint value); gchar** prefs_get_plugins(void); -void prefs_add_plugin(const char* const name); -void prefs_remove_plugin(const char* const name); +void prefs_add_plugin(const gchar* const name); +void prefs_remove_plugin(const gchar* const name); gchar* prefs_get_otr_char(void); -gboolean prefs_set_otr_char(char* ch); +gboolean prefs_set_otr_char(gchar* ch); gchar* prefs_get_pgp_char(void); -gboolean prefs_set_pgp_char(char* ch); +gboolean prefs_set_pgp_char(gchar* ch); gchar* prefs_get_omemo_char(void); -gboolean prefs_set_omemo_char(char* ch); +gboolean prefs_set_omemo_char(gchar* ch); // XEP-0373: OpenPGP for XMPP char* prefs_get_ox_char(void); -gboolean prefs_set_ox_char(char* ch); +gboolean prefs_set_ox_char(gchar* ch); gchar* prefs_get_roster_header_char(void); -void prefs_set_roster_header_char(char* ch); +void prefs_set_roster_header_char(gchar* ch); void prefs_clear_roster_header_char(void); gchar* prefs_get_roster_contact_char(void); -void prefs_set_roster_contact_char(char* ch); +void prefs_set_roster_contact_char(gchar* ch); void prefs_clear_roster_contact_char(void); gchar* prefs_get_roster_resource_char(void); -void prefs_set_roster_resource_char(char* ch); +void prefs_set_roster_resource_char(gchar* ch); void prefs_clear_roster_resource_char(void); gchar* prefs_get_roster_private_char(void); -void prefs_set_roster_private_char(char* ch); +void prefs_set_roster_private_char(gchar* ch); void prefs_clear_roster_private_char(void); gchar* prefs_get_roster_room_char(void); -void prefs_set_roster_room_char(char* ch); +void prefs_set_roster_room_char(gchar* ch); void prefs_clear_roster_room_char(void); gchar* prefs_get_roster_room_private_char(void); -void prefs_set_roster_room_private_char(char* ch); +void prefs_set_roster_room_private_char(gchar* ch); void prefs_clear_roster_room_private_char(void); gchar* prefs_get_occupants_char(void); -void prefs_set_occupants_char(char* ch); +void prefs_set_occupants_char(gchar* ch); void prefs_clear_occupants_char(void); gchar* prefs_get_occupants_header_char(void); -void prefs_set_occupants_header_char(char* ch); +void prefs_set_occupants_header_char(gchar* ch); void prefs_clear_occupants_header_char(void); gint prefs_get_roster_contact_indent(void); @@ -297,21 +297,21 @@ gint prefs_get_occupants_indent(void); void prefs_set_occupants_indent(gint value); gchar* prefs_get_correction_char(void); -void prefs_set_correction_char(char* ch); +void prefs_set_correction_char(gchar* ch); -void prefs_add_login(const char* jid); +void prefs_add_login(const gchar* jid); void prefs_set_tray_timer(gint value); gint prefs_get_tray_timer(void); -gboolean prefs_add_alias(const char* const name, const char* const value); -gboolean prefs_remove_alias(const char* const name); -gchar* prefs_get_alias(const char* const name); +gboolean prefs_add_alias(const gchar* const name, const gchar* const value); +gboolean prefs_remove_alias(const gchar* const name); +gchar* prefs_get_alias(const gchar* const name); GList* prefs_get_aliases(void); void prefs_free_aliases(GList* aliases); -gboolean prefs_add_room_notify_trigger(const char* const text); -gboolean prefs_remove_room_notify_trigger(const char* const text); +gboolean prefs_add_room_notify_trigger(const gchar* const text); +gboolean prefs_remove_room_notify_trigger(const gchar* const text); GList* prefs_get_room_notify_triggers(void); ProfWinPlacement* prefs_get_win_placement(void); diff --git a/src/config/tlscerts.c b/src/config/tlscerts.c index b1a4823af..53c0c448f 100644 --- a/src/config/tlscerts.c +++ b/src/config/tlscerts.c @@ -132,7 +132,7 @@ _tlscerts_new(gchar* fingerprint_sha1, int version, gchar* serialnumber, gchar* gchar* key_alg, gchar* signature_alg, gchar* pem, gchar* fingerprint_sha256, gchar* pubkey_fingerprint) { - TLSCertificate* cert = calloc(1, sizeof(TLSCertificate)); + TLSCertificate* cert = g_new0(TLSCertificate, 1); if (fingerprint_sha256 && fingerprint_sha1) { cert->fingerprint_sha256 = fingerprint_sha256; diff --git a/src/event/client_events.c b/src/event/client_events.c index 8aa980a6e..a4d9f7e44 100644 --- a/src/event/client_events.c +++ b/src/event/client_events.c @@ -116,7 +116,7 @@ cl_ev_reconnect(void) void cl_ev_presence_send(const resource_presence_t presence_type, const int idle_secs) { - auto_char char* signed_status = NULL; + auto_gchar gchar* signed_status = NULL; #ifdef HAVE_LIBGPGME ProfAccount* account = accounts_get_account(session_get_account_name()); diff --git a/src/event/server_events.c b/src/event/server_events.c index c877ff31c..ca718ef8e 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -603,6 +603,9 @@ _sv_ev_incoming_plain(ProfChatWin* chatwin, gboolean new_win, ProfMessage* messa if (message->body) { message->enc = PROF_MSG_ENC_NONE; message->plain = strdup(message->body); + if (message->plain == NULL) { + return; + } _clean_incoming_message(message); chatwin_incoming_msg(chatwin, message, new_win); log_database_add_incoming(message); @@ -1309,6 +1312,10 @@ sv_ev_bookmark_autojoin(Bookmark* bookmark) static void _cut(ProfMessage* message, const char* cut) { + if (message->plain == NULL) { + return; + } + if (strstr(message->plain, cut)) { auto_gcharv gchar** split = g_strsplit(message->plain, cut, -1); free(message->plain); diff --git a/src/log.c b/src/log.c index bfef7811e..2f52b2177 100644 --- a/src/log.c +++ b/src/log.c @@ -76,6 +76,8 @@ enum { static void _rotate_log_file(void) { + if (!mainlogfile) + return; auto_gchar gchar* log_file = g_strdup(mainlogfile); size_t len = strlen(log_file); auto_gchar gchar* log_file_new = malloc(len + 5); @@ -362,11 +364,6 @@ log_stderr_init(log_level_t level) if (rc != 0) goto err; - close(STDERR_FILENO); - rc = dup2(stderr_pipe[1], STDERR_FILENO); - if (rc < 0) - goto err_close; - rc = log_stderr_nonblock_set(stderr_pipe[0]) ?: log_stderr_nonblock_set(stderr_pipe[1]); if (rc != 0) @@ -374,15 +371,21 @@ log_stderr_init(log_level_t level) stderr_buf = malloc(STDERR_BUFSIZE); stderr_msg = g_string_sized_new(STDERR_BUFSIZE); - stderr_level = level; - stderr_inited = 1; - - prof_add_shutdown_routine(_log_stderr_close); if (stderr_buf == NULL || stderr_msg == NULL) { errno = ENOMEM; goto err_free; } + + int dup_fd = dup2(stderr_pipe[1], STDERR_FILENO); + if (dup_fd < 0) + goto err_free; + close(dup_fd); + + stderr_level = level; + stderr_inited = 1; + + prof_add_shutdown_routine(_log_stderr_close); return; err_free: diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index a39d42989..133287d57 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -547,8 +547,12 @@ omemo_set_device_list(const char* const from, GList* device_list) GList* fp = NULL; for (fp = g_hash_table_get_keys(known_identities); fp != NULL; fp = fp->next) { if (device_id->data == g_hash_table_lookup(known_identities, fp->data)) { - cons_show("OMEMO: Adding firstusage trust for %s device %d - Fingerprint %s", jid->barejid, device_id->data, omemo_format_fingerprint(fp->data)); - omemo_trust(jid->barejid, omemo_format_fingerprint(fp->data)); + char* formatted = omemo_format_fingerprint(fp->data); + if (formatted) { + cons_show("OMEMO: Adding firstusage trust for %s device %d - Fingerprint %s", jid->barejid, device_id->data, formatted); + omemo_trust(jid->barejid, formatted); + free(formatted); + } } } } @@ -643,8 +647,15 @@ omemo_start_device_session(const char* const jid, uint32_t device_id, log_debug("[OMEMO] There is no Session for %s ( %d) ,? building session.", jid_address.name, jid_address.device_id); int res; - address = malloc(sizeof(signal_protocol_address)); + address = calloc(1, sizeof(signal_protocol_address)); + if (!address) { + goto out; + } + address->name = strdup(jid); + if (!address->name) { + goto out; + } address->name_len = strlen(jid); address->device_id = device_id; @@ -701,15 +712,18 @@ omemo_on_message_send(ProfWin* win, const char* const message, gboolean request_ const Jid* jid = connection_get_jid(); GList* keys = NULL; - unsigned char* key; - unsigned char* iv; - unsigned char* ciphertext; - unsigned char* tag; - unsigned char* key_tag; + unsigned char* key = NULL; + unsigned char* iv = NULL; + unsigned char* ciphertext = NULL; + unsigned char* tag = NULL; + unsigned char* key_tag = NULL; size_t ciphertext_len, tag_len; ciphertext_len = strlen(message); ciphertext = malloc(ciphertext_len); + if (!ciphertext) { + goto out; + } 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); @@ -794,8 +808,17 @@ omemo_on_message_send(ProfWin* win, const char* const message, gboolean request_ } signal_buffer* buffer = ciphertext_message_get_serialized(ciphertext); omemo_key_t* key = malloc(sizeof(omemo_key_t)); + if (!key) { + SIGNAL_UNREF(ciphertext); + continue; + } key->length = signal_buffer_len(buffer); key->data = malloc(key->length); + if (!key->data) { + free(key); + SIGNAL_UNREF(ciphertext); + continue; + } memcpy(key->data, signal_buffer_data(buffer), key->length); key->device_id = GPOINTER_TO_INT(device_ids_iter->data); key->prekey = ciphertext_message_get_type(ciphertext) == CIPHERTEXT_PREKEY_TYPE; @@ -850,8 +873,17 @@ omemo_on_message_send(ProfWin* win, const char* const message, gboolean request_ } signal_buffer* buffer = ciphertext_message_get_serialized(ciphertext); omemo_key_t* key = malloc(sizeof(omemo_key_t)); + if (!key) { + SIGNAL_UNREF(ciphertext); + continue; + } key->length = signal_buffer_len(buffer); key->data = malloc(key->length); + if (!key->data) { + free(key); + SIGNAL_UNREF(ciphertext); + continue; + } memcpy(key->data, signal_buffer_data(buffer), key->length); key->device_id = GPOINTER_TO_INT(device_ids_iter->data); key->prekey = ciphertext_message_get_type(ciphertext) == CIPHERTEXT_PREKEY_TYPE; @@ -1028,7 +1060,9 @@ omemo_on_message_recv(const char* const from_jid, uint32_t sid, char* omemo_format_fingerprint(const char* const fingerprint) { - char* output = malloc(strlen(fingerprint) + strlen(fingerprint) / 8); + char* output = malloc(strlen(fingerprint) + strlen(fingerprint) / 8 + 1); + if (!output) + return NULL; size_t i, j; for (i = 0, j = 0; i < strlen(fingerprint); i++) { @@ -1046,8 +1080,10 @@ omemo_format_fingerprint(const char* const fingerprint) static char* _omemo_unformat_fingerprint(const char* const fingerprint_formatted) { - /* Unformat fingerprint */ - char* fingerprint = malloc(strlen(fingerprint_formatted)); + char* fingerprint = malloc(strlen(fingerprint_formatted) + 1); + if (!fingerprint) + return NULL; + int i; int j; for (i = 0, j = 0; fingerprint_formatted[i] != '\0'; i++) { @@ -1129,6 +1165,10 @@ _omemo_fingerprint(ec_public_key* identity, gboolean formatted) identity_public_key_data = &identity_public_key_data[1]; char* fingerprint = malloc(identity_public_key_len * 2 + 1); + if (!fingerprint) { + signal_buffer_free(identity_public_key); + return NULL; + } for (i = 0; i < identity_public_key_len; i++) { fingerprint[i * 2] = (identity_public_key_data[i] & 0xf0) >> 4; @@ -1160,6 +1200,10 @@ static unsigned char* _omemo_fingerprint_decode(const char* const fingerprint, size_t* len) { unsigned char* output = malloc(strlen(fingerprint) / 2 + 1); + if (!output) { + *len = 0; + return NULL; + } size_t i; size_t j; @@ -1182,6 +1226,10 @@ _omemo_fingerprint_decode(const char* const fingerprint, size_t* len) void omemo_trust(const char* const jid, const char* const fingerprint_formatted) { + if (!jid || !fingerprint_formatted) { + return; + } + size_t len; GHashTable* known_identities = g_hash_table_lookup(omemo_ctx.known_devices, jid); @@ -1192,6 +1240,11 @@ omemo_trust(const char* const jid, const char* const fingerprint_formatted) } char* fingerprint = _omemo_unformat_fingerprint(fingerprint_formatted); + if (!fingerprint) { + log_warning("[OMEMO] cannot unformat fingerprint"); + cons_show("Cannot unformat fingerprint"); + return; + } uint32_t device_id = GPOINTER_TO_INT(g_hash_table_lookup(known_identities, fingerprint)); free(fingerprint); @@ -1227,6 +1280,8 @@ omemo_untrust(const char* const jid, const char* const fingerprint_formatted) { size_t len; unsigned char* identity = _omemo_fingerprint_decode(fingerprint_formatted, &len); + if (!identity) + return; GHashTableIter iter; gpointer key, value; @@ -1250,6 +1305,11 @@ omemo_untrust(const char* const jid, const char* const fingerprint_formatted) free(identity); auto_char char* fingerprint = _omemo_unformat_fingerprint(fingerprint_formatted); + if (!fingerprint) { + log_warning("[OMEMO] cannot unformat fingerprint"); + cons_show("Cannot unformat fingerprint"); + return; + } /* Remove existing session */ GHashTable* known_identities = g_hash_table_lookup(omemo_ctx.known_devices, jid); @@ -1629,6 +1689,9 @@ _cache_device_identity(const char* const jid, uint32_t device_id, ec_public_key* } char* fingerprint = _omemo_fingerprint(identity, FALSE); + if (!fingerprint) { + return; + } log_debug("[OMEMO] cache identity for %s:%d: %s", jid, device_id, fingerprint); g_hash_table_insert(known_identities, strdup(fingerprint), GINT_TO_POINTER(device_id)); @@ -1642,9 +1705,15 @@ _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); - autocomplete_add(ac, formatted_fingerprint); - free(formatted_fingerprint); + if (formatted_fingerprint) { + autocomplete_add(ac, formatted_fingerprint); + free(formatted_fingerprint); + } free(fingerprint); } diff --git a/src/pgp/gpg.c b/src/pgp/gpg.c index 297e29ae0..d8ae7adae 100644 --- a/src/pgp/gpg.c +++ b/src/pgp/gpg.c @@ -66,25 +66,25 @@ static GHashTable* pubkeys; static prof_keyfile_t pubkeys_prof_keyfile; static GKeyFile* pubkeyfile; -static char* passphrase; -static char* passphrase_attempt; +static gchar* passphrase; +static gchar* passphrase_attempt; static Autocomplete key_ac; -static char* _remove_header_footer(char* str, const char* const footer); -static char* _add_header_footer(const char* const str, const char* const header, const char* const footer); -static char* _gpgme_data_to_char(gpgme_data_t data); +static gchar* _remove_header_footer(gchar* str, const char* const footer); +static gchar* _add_header_footer(const gchar* const str, const char* const header, const char* const footer); +static gchar* _gpgme_data_to_char(gpgme_data_t data); static void _save_pubkeys(void); static ProfPGPKey* _gpgme_key_to_ProfPGPKey(gpgme_key_t key); -static const char* _gpgme_key_get_email(gpgme_key_t key); +static const gchar* _gpgme_key_get_email(gpgme_key_t key); void _p_gpg_free_pubkeyid(ProfPGPPubKeyId* pubkeyid) { if (pubkeyid) { - free(pubkeyid->id); + g_free(pubkeyid->id); } - free(pubkeyid); + g_free(pubkeyid); } static gpgme_error_t @@ -95,14 +95,14 @@ _p_gpg_passphrase_cb(void* hook, const char* uid_hint, const char* passphrase_in } else { GString* pass_term = g_string_new(""); - auto_char char* password = ui_ask_pgp_passphrase(uid_hint, prev_was_bad); + auto_gchar gchar* password = ui_ask_pgp_passphrase(uid_hint, prev_was_bad); if (password) { g_string_append(pass_term, password); } g_string_append(pass_term, "\n"); if (passphrase_attempt) { - free(passphrase_attempt); + g_free(passphrase_attempt); } passphrase_attempt = g_string_free(pass_term, FALSE); @@ -127,13 +127,11 @@ _p_gpg_close(void) key_ac = NULL; if (passphrase) { - free(passphrase); - passphrase = NULL; + GFREE_SET_NULL(passphrase); } if (passphrase_attempt) { - free(passphrase_attempt); - passphrase_attempt = NULL; + GFREE_SET_NULL(passphrase_attempt); } } @@ -157,7 +155,7 @@ p_gpg_init(void) } void -p_gpg_on_connect(const char* const barejid) +p_gpg_on_connect(const gchar* const barejid) { gchar* pubsloc = files_file_in_account_data_path(DIR_PGP, barejid, "pubkeys"); if (!pubsloc) { @@ -195,10 +193,10 @@ p_gpg_on_connect(const char* const barejid) continue; } - ProfPGPPubKeyId* pubkeyid = malloc(sizeof(ProfPGPPubKeyId)); - pubkeyid->id = strdup(keyid); + ProfPGPPubKeyId* pubkeyid = g_new0(ProfPGPPubKeyId, 1); + pubkeyid->id = g_strdup(keyid); pubkeyid->received = FALSE; - g_hash_table_replace(pubkeys, strdup(jid), pubkeyid); + g_hash_table_replace(pubkeys, g_strdup(jid), pubkeyid); gpgme_key_unref(key); } } @@ -217,7 +215,7 @@ p_gpg_on_disconnect(void) } gboolean -p_gpg_addkey(const char* const jid, const char* const keyid) +p_gpg_addkey(const gchar* const jid, const gchar* const keyid) { gpgme_ctx_t ctx; gpgme_error_t error = gpgme_new(&ctx); @@ -240,10 +238,10 @@ p_gpg_addkey(const char* const jid, const char* const keyid) _save_pubkeys(); // update in memory pubkeys list - ProfPGPPubKeyId* pubkeyid = malloc(sizeof(ProfPGPPubKeyId)); - pubkeyid->id = strdup(keyid); + ProfPGPPubKeyId* pubkeyid = g_new0(ProfPGPPubKeyId, 1); + pubkeyid->id = g_strdup(keyid); pubkeyid->received = FALSE; - g_hash_table_replace(pubkeys, strdup(jid), pubkeyid); + g_hash_table_replace(pubkeys, g_strdup(jid), pubkeyid); gpgme_key_unref(key); return TRUE; @@ -252,7 +250,7 @@ p_gpg_addkey(const char* const jid, const char* const keyid) ProfPGPKey* p_gpg_key_new(void) { - ProfPGPKey* p_pgpkey = malloc(sizeof(ProfPGPKey)); + ProfPGPKey* p_pgpkey = g_new0(ProfPGPKey, 1); p_pgpkey->id = NULL; p_pgpkey->name = NULL; p_pgpkey->fp = NULL; @@ -269,10 +267,10 @@ void p_gpg_free_key(ProfPGPKey* key) { if (key) { - free(key->id); - free(key->name); - free(key->fp); - free(key); + g_free(key->id); + g_free(key->name); + g_free(key->fp); + g_free(key); } } @@ -295,7 +293,7 @@ GHashTable* p_gpg_list_keys(void) { gpgme_error_t error; - GHashTable* result = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)p_gpg_free_key); + GHashTable* result = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)p_gpg_free_key); gpgme_ctx_t ctx; error = gpgme_new(&ctx); @@ -313,7 +311,7 @@ p_gpg_list_keys(void) while (!error) { ProfPGPKey* p_pgpkey = _gpgme_key_to_ProfPGPKey(key); if (p_pgpkey != NULL) { - g_hash_table_insert(result, strdup(p_pgpkey->name), p_pgpkey); + g_hash_table_insert(result, g_strdup(p_pgpkey->name), p_pgpkey); } gpgme_key_unref(key); @@ -370,7 +368,7 @@ p_gpg_pubkeys(void) return pubkeys; } -const char* +const gchar* p_gpg_libver(void) { if (libversion == NULL) { @@ -380,14 +378,14 @@ p_gpg_libver(void) } gboolean -p_gpg_valid_key(const char* const keyid, char** err_str) +p_gpg_valid_key(const gchar* const keyid, gchar** err_str) { gpgme_ctx_t ctx; gpgme_error_t error = gpgme_new(&ctx); if (error) { log_error("GPG: Failed to create gpgme context. %s %s", gpgme_strsource(error), gpgme_strerror(error)); if (err_str) { - *err_str = strdup(gpgme_strerror(error)); + *err_str = g_strdup(gpgme_strerror(error)); } return FALSE; } @@ -398,7 +396,7 @@ p_gpg_valid_key(const char* const keyid, char** err_str) if (error || key == NULL) { log_error("GPG: Failed to get key. %s %s", gpgme_strsource(error), gpgme_strerror(error)); if (err_str) { - *err_str = strdup(error ? gpgme_strerror(error) : "gpgme didn't return any error, but it didn't return a key"); + *err_str = g_strdup(error ? gpgme_strerror(error) : "gpgme didn't return any error, but it didn't return a key"); } gpgme_release(ctx); return FALSE; @@ -410,14 +408,14 @@ p_gpg_valid_key(const char* const keyid, char** err_str) } gboolean -p_gpg_available(const char* const barejid) +p_gpg_available(const gchar* const barejid) { - char* pubkey = g_hash_table_lookup(pubkeys, barejid); + gchar* pubkey = g_hash_table_lookup(pubkeys, barejid); return (pubkey != NULL); } void -p_gpg_verify(const char* const barejid, const char* const sign) +p_gpg_verify(const gchar* const barejid, const gchar* const sign) { if (!sign) { return; @@ -431,7 +429,7 @@ p_gpg_verify(const char* const barejid, const char* const sign) return; } - auto_char char* sign_with_header_footer = _add_header_footer(sign, PGP_SIGNATURE_HEADER, PGP_SIGNATURE_FOOTER); + auto_gchar gchar* sign_with_header_footer = _add_header_footer(sign, PGP_SIGNATURE_HEADER, PGP_SIGNATURE_FOOTER); gpgme_data_t sign_data; gpgme_data_new_from_mem(&sign_data, sign_with_header_footer, strlen(sign_with_header_footer), 1); @@ -457,10 +455,10 @@ p_gpg_verify(const char* const barejid, const char* const sign) log_debug("Could not find PGP key with ID %s for %s", result->signatures->fpr, barejid); } else { log_debug("Fingerprint found for %s: %s ", barejid, key->subkeys->fpr); - ProfPGPPubKeyId* pubkeyid = malloc(sizeof(ProfPGPPubKeyId)); - pubkeyid->id = strdup(key->subkeys->keyid); + ProfPGPPubKeyId* pubkeyid = g_new0(ProfPGPPubKeyId, 1); + pubkeyid->id = g_strdup(key->subkeys->keyid); pubkeyid->received = TRUE; - g_hash_table_replace(pubkeys, strdup(barejid), pubkeyid); + g_hash_table_replace(pubkeys, g_strdup(barejid), pubkeyid); } gpgme_key_unref(key); @@ -470,8 +468,8 @@ p_gpg_verify(const char* const barejid, const char* const sign) gpgme_release(ctx); } -char* -p_gpg_sign(const char* const str, const char* const fp) +gchar* +p_gpg_sign(const gchar* const str, const gchar* const fp) { gpgme_ctx_t ctx; gpgme_error_t error = gpgme_new(&ctx); @@ -507,6 +505,10 @@ p_gpg_sign(const char* const str, const char* const fp) } else { str_or_empty = strdup(""); } + if (!str_or_empty) { + log_error("GPG: strdup failed"); + return NULL; + } gpgme_data_t str_data; gpgme_data_new_from_mem(&str_data, str_or_empty, strlen(str_or_empty), 1); @@ -524,10 +526,10 @@ p_gpg_sign(const char* const str, const char* const fp) return NULL; } - char* result = NULL; + gchar* result = NULL; size_t len = 0; - char* signed_str = gpgme_data_release_and_get_mem(signed_data, &len); + gchar* signed_str = gpgme_data_release_and_get_mem(signed_data, &len); if (signed_str) { GString* signed_gstr = g_string_new(""); g_string_append_len(signed_gstr, signed_str, len); @@ -537,14 +539,14 @@ p_gpg_sign(const char* const str, const char* const fp) } if (passphrase_attempt) { - passphrase = strdup(passphrase_attempt); + passphrase = g_strdup(passphrase_attempt); } return result; } -char* -p_gpg_encrypt(const char* const barejid, const char* const message, const char* const fp) +gchar* +p_gpg_encrypt(const gchar* const barejid, const gchar* const message, const gchar* const fp) { ProfPGPPubKeyId* pubkeyid = g_hash_table_lookup(pubkeys, barejid); if (!pubkeyid) { @@ -618,8 +620,8 @@ p_gpg_encrypt(const char* const barejid, const char* const message, const char* return result; } -char* -p_gpg_decrypt(const char* const cipher) +gchar* +p_gpg_decrypt(const gchar* const cipher) { gpgme_ctx_t ctx; gpgme_error_t error = gpgme_new(&ctx); @@ -631,7 +633,7 @@ p_gpg_decrypt(const char* const cipher) gpgme_set_passphrase_cb(ctx, (gpgme_passphrase_cb_t)_p_gpg_passphrase_cb, NULL); - auto_char char* cipher_with_headers = _add_header_footer(cipher, PGP_MESSAGE_HEADER, PGP_MESSAGE_FOOTER); + auto_gchar gchar* cipher_with_headers = _add_header_footer(cipher, PGP_MESSAGE_HEADER, PGP_MESSAGE_FOOTER); gpgme_data_t cipher_data; gpgme_data_new_from_mem(&cipher_data, cipher_with_headers, strlen(cipher_with_headers), 1); @@ -657,7 +659,7 @@ p_gpg_decrypt(const char* const cipher) error = gpgme_get_key(ctx, recipient->keyid, &key, 1); if (!error && key) { - const char* addr = _gpgme_key_get_email(key); + const gchar* addr = _gpgme_key_get_email(key); if (addr) { g_string_append(recipients_str, addr); } @@ -677,7 +679,7 @@ p_gpg_decrypt(const char* const cipher) gpgme_release(ctx); if (passphrase_attempt) { - passphrase = strdup(passphrase_attempt); + passphrase = g_strdup(passphrase_attempt); } return _gpgme_data_to_char(plain_data); @@ -689,8 +691,8 @@ p_gpg_free_decrypted(char* decrypted) g_free(decrypted); } -char* -p_gpg_autocomplete_key(const char* const search_str, gboolean previous, void* context) +gchar* +p_gpg_autocomplete_key(const gchar* const search_str, gboolean previous, void* context) { return autocomplete_complete(key_ac, search_str, TRUE, previous); } @@ -701,8 +703,8 @@ p_gpg_autocomplete_key_reset(void) autocomplete_reset(key_ac); } -char* -p_gpg_format_fp_str(char* fp) +gchar* +p_gpg_format_fp_str(gchar* fp) { if (!fp) { return NULL; @@ -725,12 +727,12 @@ p_gpg_format_fp_str(char* fp) * * @param keyid The key ID for which to retrieve the public key data. * If the key ID is empty or NULL, returns NULL. - * @return The public key data as a null-terminated char* string allocated using malloc. + * @return The public key data as a null-terminated gchar* string allocated using malloc. * The returned string should be freed by the caller. * Returns NULL on error, and errors are written to the error log. */ -char* -p_gpg_get_pubkey(const char* keyid) +gchar* +p_gpg_get_pubkey(const gchar* keyid) { if (!keyid || *keyid == '\0') { return NULL; @@ -774,18 +776,18 @@ p_gpg_get_pubkey(const char* keyid) * @return TRUE if the buffer has the expected header and footer of an armored public key, FALSE otherwise. */ gboolean -p_gpg_is_public_key_format(const char* buffer) +p_gpg_is_public_key_format(const gchar* buffer) { if (buffer == NULL || buffer[0] == '\0') { return false; } - const char* headerPos = strstr(buffer, PGP_PUBLIC_KEY_HEADER); + const gchar* headerPos = strstr(buffer, PGP_PUBLIC_KEY_HEADER); if (headerPos == NULL) { return false; } - const char* footerPos = strstr(buffer, PGP_PUBLIC_KEY_FOOTER); + const gchar* footerPos = strstr(buffer, PGP_PUBLIC_KEY_FOOTER); return (footerPos != NULL && footerPos > headerPos); } @@ -800,7 +802,7 @@ p_gpg_is_public_key_format(const char* buffer) * by calling p_gpg_free_key() to avoid resource leaks. */ ProfPGPKey* -p_gpg_import_pubkey(const char* buffer) +p_gpg_import_pubkey(const gchar* buffer) { gpgme_ctx_t ctx; ProfPGPKey* result = NULL; @@ -870,9 +872,9 @@ _gpgme_key_to_ProfPGPKey(gpgme_key_t key) ProfPGPKey* p_pgpkey = p_gpg_key_new(); gpgme_subkey_t sub = key->subkeys; - p_pgpkey->id = strdup(sub->keyid); - p_pgpkey->name = strdup(key->uids->uid); - p_pgpkey->fp = strdup(sub->fpr); + p_pgpkey->id = g_strdup(sub->keyid); + p_pgpkey->name = g_strdup(key->uids->uid); + p_pgpkey->fp = g_strdup(sub->fpr); while (sub) { if (sub->can_encrypt) @@ -899,7 +901,7 @@ _gpgme_key_to_ProfPGPKey(gpgme_key_t key) * @return The first email address found in the key's user IDs, or NULL if none found. * The returned string should not be freed as it points to internal gpgme memory. */ -static const char* +static const gchar* _gpgme_key_get_email(gpgme_key_t key) { if (!key) { @@ -930,7 +932,7 @@ _gpgme_key_get_email(gpgme_key_t key) * @return The converted string allocated using malloc, which should be freed by the caller. * If an error occurs or the data is empty, NULL is returned and errors are written to the error log. */ -static char* +static gchar* _gpgme_data_to_char(gpgme_data_t data) { size_t buffer_size = 0; @@ -941,16 +943,13 @@ _gpgme_data_to_char(gpgme_data_t data) return NULL; } - char* buffer = malloc(buffer_size + 1); - memcpy(buffer, gpgme_buffer, buffer_size); - buffer[buffer_size] = '\0'; + gchar* buffer = g_strndup(gpgme_buffer, buffer_size); gpgme_free(gpgme_buffer); - return buffer; } -static char* -_remove_header_footer(char* str, const char* const footer) +static gchar* +_remove_header_footer(gchar* str, const char* const footer) { int pos = 0; int newlines = 0; @@ -966,15 +965,15 @@ _remove_header_footer(char* str, const char* const footer) } } - char* stripped = strdup(&str[pos]); - char* footer_start = g_strrstr(stripped, footer); + gchar* stripped = g_strdup(&str[pos]); + gchar* footer_start = g_strrstr(stripped, footer); footer_start[0] = '\0'; return stripped; } -static char* -_add_header_footer(const char* const str, const char* const header, const char* const footer) +static gchar* +_add_header_footer(const gchar* const str, const char* const header, const char* const footer) { return g_strdup_printf("%s\n\n%s\n%s", header, str, footer); } diff --git a/src/pgp/gpg.h b/src/pgp/gpg.h index d1cff52e9..c553f1f3a 100644 --- a/src/pgp/gpg.h +++ b/src/pgp/gpg.h @@ -38,9 +38,9 @@ typedef struct pgp_key_t { - char* id; - char* name; - char* fp; + gchar* id; + gchar* name; + gchar* fp; gboolean encrypt; gboolean sign; gboolean certify; @@ -50,31 +50,31 @@ typedef struct pgp_key_t typedef struct pgp_pubkeyid_t { - char* id; + gchar* id; gboolean received; } ProfPGPPubKeyId; void p_gpg_init(void); -void p_gpg_on_connect(const char* const barejid); +void p_gpg_on_connect(const gchar* const barejid); void p_gpg_on_disconnect(void); GHashTable* p_gpg_list_keys(void); void p_gpg_free_keys(GHashTable* keys); -gboolean p_gpg_addkey(const char* const jid, const char* const keyid); +gboolean p_gpg_addkey(const gchar* const jid, const gchar* const keyid); GHashTable* p_gpg_pubkeys(void); -gboolean p_gpg_valid_key(const char* const keyid, char** err_str); -gboolean p_gpg_available(const char* const barejid); -const char* p_gpg_libver(void); -char* p_gpg_sign(const char* const str, const char* const fp); -void p_gpg_verify(const char* const barejid, const char* const sign); -char* p_gpg_encrypt(const char* const barejid, const char* const message, const char* const fp); -char* p_gpg_decrypt(const char* const cipher); -void p_gpg_free_decrypted(char* decrypted); -char* p_gpg_autocomplete_key(const char* const search_str, gboolean previous, void* context); +gboolean p_gpg_valid_key(const gchar* const keyid, gchar** err_str); +gboolean p_gpg_available(const gchar* const barejid); +const gchar* p_gpg_libver(void); +gchar* p_gpg_sign(const gchar* const str, const gchar* const fp); +void p_gpg_verify(const gchar* const barejid, const gchar* const sign); +gchar* p_gpg_encrypt(const gchar* const barejid, const gchar* const message, const gchar* const fp); +gchar* p_gpg_decrypt(const gchar* const cipher); +void p_gpg_free_decrypted(gchar* decrypted); +gchar* p_gpg_autocomplete_key(const gchar* const search_str, gboolean previous, void* context); void p_gpg_autocomplete_key_reset(void); -char* p_gpg_format_fp_str(char* fp); -char* p_gpg_get_pubkey(const char* const keyid); -gboolean p_gpg_is_public_key_format(const char* buffer); -ProfPGPKey* p_gpg_import_pubkey(const char* buffer); +gchar* p_gpg_format_fp_str(gchar* fp); +gchar* p_gpg_get_pubkey(const gchar* const keyid); +gboolean p_gpg_is_public_key_format(const gchar* buffer); +ProfPGPKey* p_gpg_import_pubkey(const gchar* buffer); ProfPGPKey* p_gpg_key_new(void); void p_gpg_free_key(ProfPGPKey* key); diff --git a/src/pgp/ox.c b/src/pgp/ox.c index 8cec46f88..e86b482f7 100644 --- a/src/pgp/ox.c +++ b/src/pgp/ox.c @@ -85,6 +85,7 @@ ox_gpg_public_keys(void) if (error != GPG_ERR_EOF && error != GPG_ERR_NO_ERROR) { log_error("OX: gpgme_op_keylist_next %s %s", gpgme_strsource(error), gpgme_strerror(error)); g_hash_table_destroy(result); + gpgme_release(ctx); return NULL; } while (!error) { @@ -145,10 +146,16 @@ ox_gpg_public_keys(void) char* p_ox_gpg_signcrypt(const char* const sender_barejid, const char* const recipient_barejid, const char* const message) { + char* result = NULL; + gpgme_ctx_t ctx = NULL; + gpgme_key_t recp[3] = { NULL, NULL, NULL }; + gpgme_data_t plain = NULL; + gpgme_data_t cipher = NULL; + char* cipher_str = NULL; + setlocale(LC_ALL, ""); gpgme_check_version(NULL); gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); - gpgme_ctx_t ctx; gpgme_error_t error = gpgme_new(&ctx); if (GPG_ERR_NO_ERROR != error) { @@ -165,13 +172,6 @@ p_ox_gpg_signcrypt(const char* const sender_barejid, const char* const recipient gpgme_set_textmode(ctx, 0); gpgme_set_offline(ctx, 1); gpgme_set_keylist_mode(ctx, GPGME_KEYLIST_MODE_LOCAL); - if (error != 0) { - log_error("OX: Signcrypt error: %s", gpgme_strerror(error)); - } - - gpgme_key_t recp[3]; - recp[0] = NULL, - recp[1] = NULL; char* xmpp_jid_me = alloca((strlen(sender_barejid) + 6) * sizeof(char)); char* xmpp_jid_recipient = alloca((strlen(recipient_barejid) + 6) * sizeof(char)); @@ -185,64 +185,73 @@ p_ox_gpg_signcrypt(const char* const sender_barejid, const char* const recipient // lookup own key recp[0] = _ox_key_lookup(sender_barejid, TRUE); - if (error != 0) { + if (recp[0] == NULL) { cons_show_error("Can't find OX key for %s", xmpp_jid_me); - log_error("OX: Key not found for %s. Error: %s", xmpp_jid_me, gpgme_strerror(error)); - return NULL; + log_error("OX: Key not found for %s.", xmpp_jid_me); + goto cleanup; } error = gpgme_signers_add(ctx, recp[0]); if (error != 0) { log_error("OX: gpgme_signers_add %s. Error: %s", xmpp_jid_me, gpgme_strerror(error)); - return NULL; + goto cleanup; } // lookup key of recipient recp[1] = _ox_key_lookup(recipient_barejid, FALSE); - if (error != 0) { + if (recp[1] == NULL) { cons_show_error("Can't find OX key for %s", xmpp_jid_recipient); - log_error("OX: Key not found for %s. Error: %s", xmpp_jid_recipient, gpgme_strerror(error)); - return NULL; + log_error("OX: Key not found for %s.", xmpp_jid_recipient); + goto cleanup; } recp[2] = NULL; - log_debug("OX: %s <%s>", recp[0]->uids->name, recp[0]->uids->email); - log_debug("OX: %s <%s>", recp[1]->uids->name, recp[1]->uids->email); + if (recp[0]->uids) { + log_debug("OX: %s <%s>", recp[0]->uids->name, recp[0]->uids->email); + } + if (recp[1]->uids) { + log_debug("OX: %s <%s>", recp[1]->uids->name, recp[1]->uids->email); + } gpgme_encrypt_flags_t flags = 0; - gpgme_data_t plain; - gpgme_data_t cipher; - - error = gpgme_data_new(&plain); - if (error != 0) { - log_error("OX: %s", gpgme_strerror(error)); - return NULL; - } - error = gpgme_data_new_from_mem(&plain, message, strlen(message), 0); if (error != 0) { log_error("OX: %s", gpgme_strerror(error)); - return NULL; + goto cleanup; } + error = gpgme_data_new(&cipher); if (error != 0) { log_error("OX: %s", gpgme_strerror(error)); - return NULL; + goto cleanup; } error = gpgme_op_encrypt_sign(ctx, recp, flags, plain, cipher); if (error != 0) { log_error("OX: %s", gpgme_strerror(error)); - return NULL; + goto cleanup; } size_t len; - char* cipher_str = gpgme_data_release_and_get_mem(cipher, &len); - char* result = g_base64_encode((unsigned char*)cipher_str, len); - gpgme_key_release(recp[0]); - gpgme_key_release(recp[1]); - gpgme_release(ctx); + cipher_str = gpgme_data_release_and_get_mem(cipher, &len); + cipher = NULL; // Already released by gpgme_data_release_and_get_mem + result = g_base64_encode((unsigned char*)cipher_str, len); + +cleanup: + if (cipher_str) + gpgme_free(cipher_str); + if (plain) + gpgme_data_release(plain); + if (cipher) + gpgme_data_release(cipher); + if (recp[0]) + gpgme_key_release(recp[0]); + if (recp[1]) + gpgme_key_release(recp[1]); + if (ctx) + gpgme_release(ctx); + return result; } @@ -313,6 +322,7 @@ _ox_key_lookup(const char* const barejid, gboolean secret_only) if (uid->name && strlen(uid->name) >= 10) { if (g_strcmp0(uid->name, xmppuri->str) == 0) { gpgme_release(ctx); + g_string_free(xmppuri, TRUE); return key; } } @@ -321,6 +331,7 @@ _ox_key_lookup(const char* const barejid, gboolean secret_only) gpgme_key_unref(key); error = gpgme_op_keylist_next(ctx, &key); } + g_string_free(xmppuri, TRUE); } gpgme_release(ctx); @@ -362,6 +373,13 @@ _ox_key_is_usable(gpgme_key_t key, const char* const barejid, gboolean secret) char* p_ox_gpg_decrypt(char* base64) { + char* result = NULL; + gpgme_ctx_t ctx = NULL; + gpgme_data_t plain = NULL; + gpgme_data_t cipher = NULL; + guchar* encrypted = NULL; + char* plain_str = NULL; + // if there is no private key avaibale, // we don't try do decrypt if (!ox_is_private_key_available(connection_get_barejid())) { @@ -370,7 +388,6 @@ p_ox_gpg_decrypt(char* base64) setlocale(LC_ALL, ""); gpgme_check_version(NULL); gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); - gpgme_ctx_t ctx; gpgme_error_t error = gpgme_new(&ctx); if (GPG_ERR_NO_ERROR != error) { @@ -387,25 +404,19 @@ p_ox_gpg_decrypt(char* base64) gpgme_set_textmode(ctx, 0); gpgme_set_offline(ctx, 1); gpgme_set_keylist_mode(ctx, GPGME_KEYLIST_MODE_LOCAL); - if (error != 0) { - log_error("OX: %s", gpgme_strerror(error)); - } - - gpgme_data_t plain = NULL; - gpgme_data_t cipher = NULL; gsize s; - guchar* encrypted = g_base64_decode(base64, &s); + encrypted = g_base64_decode(base64, &s); error = gpgme_data_new_from_mem(&cipher, (char*)encrypted, s, 0); if (error != 0) { log_error("OX: gpgme_data_new_from_mem: %s", gpgme_strerror(error)); - return NULL; + goto cleanup; } error = gpgme_data_new(&plain); if (error != 0) { log_error("OX: %s", gpgme_strerror(error)); - return NULL; + goto cleanup; } error = gpgme_op_decrypt_verify(ctx, cipher, plain); @@ -413,18 +424,29 @@ p_ox_gpg_decrypt(char* base64) log_error("OX: gpgme_op_decrypt: %s", gpgme_strerror(error)); error = gpgme_op_decrypt(ctx, cipher, plain); if (error != 0) { - return NULL; + goto cleanup; } } size_t len; - char* plain_str = gpgme_data_release_and_get_mem(plain, &len); - char* result = NULL; + plain_str = gpgme_data_release_and_get_mem(plain, &len); + plain = NULL; // Already released by gpgme_data_release_and_get_mem if (plain_str) { result = strndup(plain_str, len); - gpgme_free(plain_str); } +cleanup: + if (encrypted) + g_free(encrypted); + if (plain_str) + gpgme_free(plain_str); + if (plain) + gpgme_data_release(plain); + if (cipher) + gpgme_data_release(cipher); + if (ctx) + gpgme_release(ctx); + return result; } @@ -455,30 +477,33 @@ p_ox_gpg_readkey(const char* const filename, char** key, char** fp) { log_info("PX: Read OpenPGP Key from file %s", filename); - GError* error = NULL; + GError* gerr = NULL; gchar* data = NULL; gsize size = -1; + gpgme_ctx_t ctx = NULL; + gpgme_data_t gpgme_data = NULL; + gpgme_key_t gkey = NULL; + gpgme_key_t end = NULL; gboolean success = g_file_get_contents(filename, &data, &size, - &error); + &gerr); if (success) { setlocale(LC_ALL, ""); gpgme_check_version(NULL); gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); - gpgme_ctx_t ctx; gpgme_error_t error = gpgme_new(&ctx); if (GPG_ERR_NO_ERROR != error) { log_error("OX: Read OpenPGP key from file: gpgme_new failed: %s", gpgme_strerror(error)); - return; + goto cleanup; } error = gpgme_set_protocol(ctx, GPGME_PROTOCOL_OPENPGP); if (error != GPG_ERR_NO_ERROR) { log_error("OX: Read OpenPGP key from file: set GPGME_PROTOCOL_OPENPGP: %s", gpgme_strerror(error)); - return; + goto cleanup; } gpgme_set_armor(ctx, 0); @@ -486,49 +511,54 @@ p_ox_gpg_readkey(const char* const filename, char** key, char** fp) gpgme_set_offline(ctx, 1); gpgme_set_keylist_mode(ctx, GPGME_KEYLIST_MODE_LOCAL); - gpgme_data_t gpgme_data = NULL; - error = gpgme_data_new(&gpgme_data); - if (error != GPG_ERR_NO_ERROR) { - log_error("OX: Read OpenPGP key from file: gpgme_data_new %s", gpgme_strerror(error)); - return; - } - error = gpgme_data_new_from_mem(&gpgme_data, (char*)data, size, 0); if (error != GPG_ERR_NO_ERROR) { log_error("OX: Read OpenPGP key from file: gpgme_data_new_from_mem %s", gpgme_strerror(error)); - return; + goto cleanup; } error = gpgme_op_keylist_from_data_start(ctx, gpgme_data, 0); if (error != GPG_ERR_NO_ERROR) { log_error("OX: Read OpenPGP key from file: gpgme_op_keylist_from_data_start %s", gpgme_strerror(error)); - return; + goto cleanup; } - gpgme_key_t gkey; error = gpgme_op_keylist_next(ctx, &gkey); if (error != GPG_ERR_NO_ERROR) { log_error("OX: Read OpenPGP key from file: gpgme_op_keylist_next %s", gpgme_strerror(error)); - return; + goto cleanup; } - gpgme_key_t end; error = gpgme_op_keylist_next(ctx, &end); if (error == GPG_ERR_NO_ERROR) { log_error("OX: Read OpenPGP key from file: ambiguous key"); - return; + goto cleanup; } if (gkey->revoked || gkey->expired || gkey->disabled || gkey->invalid || gkey->secret) { log_error("OX: Read OpenPGP key from file: Key is not valid"); - return; + goto cleanup; } gchar* keybase64 = g_base64_encode((const guchar*)data, size); *key = strdup(keybase64); *fp = strdup(gkey->fpr); + g_free(keybase64); } else { - log_error("OX: Read OpenPGP key from file: Unable to read file: %s", error->message); + log_error("OX: Read OpenPGP key from file: Unable to read file: %s", gerr->message); + g_error_free(gerr); } + +cleanup: + if (data) + g_free(data); + if (gpgme_data) + gpgme_data_release(gpgme_data); + if (gkey) + gpgme_key_unref(gkey); + if (end) + gpgme_key_unref(end); + if (ctx) + gpgme_release(ctx); } gboolean @@ -536,22 +566,26 @@ p_ox_gpg_import(char* base64_public_key) { gsize size = -1; guchar* key = g_base64_decode(base64_public_key, &size); + gboolean result = TRUE; setlocale(LC_ALL, ""); gpgme_check_version(NULL); gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); - gpgme_ctx_t ctx; + gpgme_ctx_t ctx = NULL; + gpgme_data_t gpgme_data = NULL; gpgme_error_t error = gpgme_new(&ctx); if (GPG_ERR_NO_ERROR != error) { log_error("OX: Read OpenPGP key from file: gpgme_new failed: %s", gpgme_strerror(error)); - return FALSE; + result = FALSE; + goto cleanup; } error = gpgme_set_protocol(ctx, GPGME_PROTOCOL_OPENPGP); if (error != GPG_ERR_NO_ERROR) { log_error("OX: Read OpenPGP key from file: set GPGME_PROTOCOL_OPENPGP: %s", gpgme_strerror(error)); - return FALSE; + result = FALSE; + goto cleanup; } gpgme_set_armor(ctx, 0); @@ -559,18 +593,26 @@ p_ox_gpg_import(char* base64_public_key) gpgme_set_offline(ctx, 1); gpgme_set_keylist_mode(ctx, GPGME_KEYLIST_MODE_LOCAL); - gpgme_data_t gpgme_data = NULL; - error = gpgme_data_new(&gpgme_data); + error = gpgme_data_new_from_mem(&gpgme_data, (gchar*)key, size, 0); if (error != GPG_ERR_NO_ERROR) { - log_error("OX: Read OpenPGP key from file: gpgme_data_new %s", gpgme_strerror(error)); - return FALSE; + log_error("OX: Read OpenPGP key from file: gpgme_data_new_from_mem %s", gpgme_strerror(error)); + result = FALSE; + goto cleanup; } - gpgme_data_new_from_mem(&gpgme_data, (gchar*)key, size, 0); error = gpgme_op_import(ctx, gpgme_data); if (error != GPG_ERR_NO_ERROR) { log_error("OX: Failed to import key"); + result = FALSE; } - return TRUE; +cleanup: + if (key) + g_free(key); + if (gpgme_data) + gpgme_data_release(gpgme_data); + if (ctx) + gpgme_release(ctx); + + return result; } diff --git a/src/plugins/api.c b/src/plugins/api.c index 97ad72c34..9a5ef1c1c 100644 --- a/src/plugins/api.c +++ b/src/plugins/api.c @@ -111,29 +111,29 @@ api_register_command(const char* const plugin_name, const char* command_name, in char** synopsis, const char* description, char* arguments[][2], char** examples, void* callback, void (*callback_exec)(PluginCommand* command, gchar** args), void (*callback_destroy)(void* callback)) { - PluginCommand* command = calloc(1, sizeof(PluginCommand)); - command->command_name = strdup(command_name); + PluginCommand* command = g_new0(PluginCommand, 1); + command->command_name = g_strdup(command_name); command->min_args = min_args; command->max_args = max_args; command->callback = callback; command->callback_exec = callback_exec; command->callback_destroy = callback_destroy; - CommandHelp* help = calloc(1, sizeof(CommandHelp)); + CommandHelp* help = g_new0(CommandHelp, 1); int i; for (i = 0; synopsis[i] != NULL; i++) { - help->synopsis[i] = strdup(synopsis[i]); + help->synopsis[i] = g_strdup(synopsis[i]); } - help->desc = strdup(description); + help->desc = g_strdup(description); for (i = 0; arguments[i][0] != NULL; i++) { - help->args[i][0] = strdup(arguments[i][0]); - help->args[i][1] = strdup(arguments[i][1]); + help->args[i][0] = g_strdup(arguments[i][0]); + help->args[i][1] = g_strdup(arguments[i][1]); } for (i = 0; examples[i] != NULL; i++) { - help->examples[i] = strdup(examples[i]); + help->examples[i] = g_strdup(examples[i]); } command->help = help; @@ -145,7 +145,7 @@ void api_register_timed(const char* const plugin_name, void* callback, int interval_seconds, void (*callback_exec)(PluginTimedFunction* timed_function), void (*callback_destroy)(void* callback)) { - PluginTimedFunction* timed_function = malloc(sizeof(PluginTimedFunction)); + PluginTimedFunction* timed_function = g_new0(PluginTimedFunction, 1); timed_function->callback = callback; timed_function->callback_exec = callback_exec; timed_function->callback_destroy = callback_destroy; @@ -226,7 +226,7 @@ api_get_current_nick(void) ProfMucWin* mucwin = (ProfMucWin*)current; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); const char* const nick = muc_nick(mucwin->roomjid); - return nick ? strdup(nick) : NULL; + return nick ? g_strdup(nick) : NULL; } else { return NULL; } @@ -235,7 +235,7 @@ api_get_current_nick(void) char* api_get_name_from_roster(const char* barejid) { - return strdup(roster_get_display_name(barejid)); + return g_strdup(roster_get_display_name(barejid)); } char* @@ -253,14 +253,22 @@ api_get_current_occupants(void) assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); GList* occupants_list = muc_roster(mucwin->roomjid); char** result = malloc((g_list_length(occupants_list) + 1) * sizeof(char*)); + if (result == NULL) { + g_list_free(occupants_list); + return NULL; + } + GList* curr = occupants_list; int i = 0; while (curr) { Occupant* occupant = curr->data; - result[i++] = strdup(occupant->nick); + result[i++] = g_strdup(occupant->nick); curr = g_list_next(curr); } result[i] = NULL; + + g_list_free(occupants_list); + return result; } else { return NULL; @@ -283,7 +291,7 @@ api_get_room_nick(const char* barejid) { const char* const nick = muc_nick(barejid); - return nick ? strdup(nick) : NULL; + return nick ? g_strdup(nick) : NULL; } void @@ -331,7 +339,7 @@ api_win_create( return; } - PluginWindowCallback* window = malloc(sizeof(PluginWindowCallback)); + PluginWindowCallback* window = g_new0(PluginWindowCallback, 1); window->callback = callback; window->callback_exec = callback_exec; window->callback_destroy = callback_destroy; @@ -485,7 +493,7 @@ api_incoming_message(const char* const barejid, const char* const resource, cons { ProfMessage* message = message_init(); message->from_jid = jid_create_from_bare_and_resource(barejid, resource); - message->plain = strdup(plain); + message->plain = g_strdup(plain); sv_ev_incoming_message(message); diff --git a/src/plugins/autocompleters.c b/src/plugins/autocompleters.c index 1a9a0f2b9..4ad97cf05 100644 --- a/src/plugins/autocompleters.c +++ b/src/plugins/autocompleters.c @@ -75,14 +75,14 @@ autocompleters_add(const char* const plugin_name, const char* key, char** items) } else { Autocomplete new_ac = autocomplete_new(); autocomplete_add_all(new_ac, items); - g_hash_table_insert(key_to_ac, strdup(key), new_ac); + g_hash_table_insert(key_to_ac, g_strdup(key), new_ac); } } else { key_to_ac = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)autocomplete_free); Autocomplete new_ac = autocomplete_new(); autocomplete_add_all(new_ac, items); - g_hash_table_insert(key_to_ac, strdup(key), new_ac); - g_hash_table_insert(plugin_to_acs, strdup(plugin_name), key_to_ac); + g_hash_table_insert(key_to_ac, g_strdup(key), new_ac); + g_hash_table_insert(plugin_to_acs, g_strdup(plugin_name), key_to_ac); } } @@ -123,11 +123,11 @@ autocompleters_filepath_add(const char* const plugin_name, const char* prefix) { GHashTable* prefixes = g_hash_table_lookup(plugin_to_filepath_acs, plugin_name); if (prefixes) { - g_hash_table_add(prefixes, strdup(prefix)); + g_hash_table_add(prefixes, g_strdup(prefix)); } else { prefixes = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - g_hash_table_add(prefixes, strdup(prefix)); - g_hash_table_insert(plugin_to_filepath_acs, strdup(plugin_name), prefixes); + g_hash_table_add(prefixes, g_strdup(prefix)); + g_hash_table_insert(plugin_to_filepath_acs, g_strdup(plugin_name), prefixes); } } diff --git a/src/plugins/c_api.c b/src/plugins/c_api.c index a9d04127e..d51ccd06d 100644 --- a/src/plugins/c_api.c +++ b/src/plugins/c_api.c @@ -94,7 +94,7 @@ c_api_register_command(const char* filename, const char* command_name, int min_a auto_char char* plugin_name = _c_plugin_name(filename); log_debug("Register command %s for %s", command_name, plugin_name); - CommandWrapper* wrapper = malloc(sizeof(CommandWrapper)); + CommandWrapper* wrapper = g_new0(CommandWrapper, 1); wrapper->func = callback; api_register_command(plugin_name, command_name, min_args, max_args, synopsis, description, arguments, examples, wrapper, c_command_callback, free); @@ -106,7 +106,7 @@ c_api_register_timed(const char* filename, void (*callback)(void), int interval_ auto_char char* plugin_name = _c_plugin_name(filename); log_debug("Register timed for %s", plugin_name); - TimedWrapper* wrapper = malloc(sizeof(TimedWrapper)); + TimedWrapper* wrapper = g_new0(TimedWrapper, 1); wrapper->func = callback; api_register_timed(plugin_name, wrapper, interval_seconds, c_timed_callback, free); } @@ -242,7 +242,7 @@ c_api_win_create(const char* filename, char* tag, void (*callback)(char* tag, ch { auto_char char* plugin_name = _c_plugin_name(filename); - WindowWrapper* wrapper = malloc(sizeof(WindowWrapper)); + WindowWrapper* wrapper = g_new0(WindowWrapper, 1); wrapper->func = callback; api_win_create(plugin_name, tag, wrapper, c_window_callback, free); } diff --git a/src/plugins/c_plugins.c b/src/plugins/c_plugins.c index f2fc7086f..f3fd17f98 100644 --- a/src/plugins/c_plugins.c +++ b/src/plugins/c_plugins.c @@ -78,8 +78,8 @@ c_plugin_create(const char* const filename) return NULL; } - plugin = malloc(sizeof(ProfPlugin)); - plugin->name = strdup(filename); + plugin = g_new0(ProfPlugin, 1); + plugin->name = g_strdup(filename); plugin->lang = LANG_C; plugin->module = handle; plugin->init_func = c_init_hook; diff --git a/src/plugins/callbacks.c b/src/plugins/callbacks.c index 6852a0ace..82aea6083 100644 --- a/src/plugins/callbacks.c +++ b/src/plugins/callbacks.c @@ -139,9 +139,9 @@ _free_timed_function_list(GList* timed_functions) void callbacks_init(void) { - p_commands = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_free_command_hash); - p_timed_functions = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_free_timed_function_list); - p_window_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_free_window_callbacks); + p_commands = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)_free_command_hash); + p_timed_functions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)_free_timed_function_list); + p_window_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)_free_window_callbacks); } void @@ -193,11 +193,11 @@ callbacks_add_command(const char* const plugin_name, PluginCommand* command) { GHashTable* command_hash = g_hash_table_lookup(p_commands, plugin_name); if (command_hash) { - g_hash_table_insert(command_hash, strdup(command->command_name), command); + g_hash_table_insert(command_hash, g_strdup(command->command_name), command); } else { - command_hash = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_free_command); - g_hash_table_insert(command_hash, strdup(command->command_name), command); - g_hash_table_insert(p_commands, strdup(plugin_name), command_hash); + command_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)_free_command); + g_hash_table_insert(command_hash, g_strdup(command->command_name), command); + g_hash_table_insert(p_commands, g_strdup(plugin_name), command_hash); } cmd_ac_add(command->command_name); cmd_ac_add_help(&command->command_name[1]); @@ -212,7 +212,7 @@ callbacks_add_timed(const char* const plugin_name, PluginTimedFunction* timed_fu timed_function_list = g_list_append(timed_function_list, timed_function); } else { timed_function_list = g_list_append(timed_function_list, timed_function); - g_hash_table_insert(p_timed_functions, strdup(plugin_name), timed_function_list); + g_hash_table_insert(p_timed_functions, g_strdup(plugin_name), timed_function_list); } } @@ -244,11 +244,11 @@ callbacks_add_window_handler(const char* const plugin_name, const char* tag, Plu { GHashTable* window_callbacks = g_hash_table_lookup(p_window_callbacks, plugin_name); if (window_callbacks) { - g_hash_table_insert(window_callbacks, strdup(tag), window_callback); + g_hash_table_insert(window_callbacks, g_strdup(tag), window_callback); } else { - window_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_free_window_callback); - g_hash_table_insert(window_callbacks, strdup(tag), window_callback); - g_hash_table_insert(p_window_callbacks, strdup(plugin_name), window_callbacks); + window_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)_free_window_callback); + g_hash_table_insert(window_callbacks, g_strdup(tag), window_callback); + g_hash_table_insert(p_window_callbacks, g_strdup(plugin_name), window_callbacks); } } diff --git a/src/plugins/disco.c b/src/plugins/disco.c index 0bb715b22..c59f716a8 100644 --- a/src/plugins/disco.c +++ b/src/plugins/disco.c @@ -60,21 +60,21 @@ disco_add_feature(const char* plugin_name, char* feature) } if (!features) { - features = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL); + features = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); } if (!plugin_to_features) { - plugin_to_features = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_free_features); + plugin_to_features = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)_free_features); } GHashTable* plugin_features = g_hash_table_lookup(plugin_to_features, plugin_name); gboolean added = FALSE; if (plugin_features == NULL) { - plugin_features = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL); - g_hash_table_add(plugin_features, strdup(feature)); - g_hash_table_insert(plugin_to_features, strdup(plugin_name), plugin_features); + plugin_features = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + g_hash_table_add(plugin_features, g_strdup(feature)); + g_hash_table_insert(plugin_to_features, g_strdup(plugin_name), plugin_features); added = TRUE; } else if (!g_hash_table_contains(plugin_features, feature)) { - g_hash_table_add(plugin_features, strdup(feature)); + g_hash_table_add(plugin_features, g_strdup(feature)); added = TRUE; } @@ -83,12 +83,12 @@ disco_add_feature(const char* plugin_name, char* feature) } if (!g_hash_table_contains(features, feature)) { - g_hash_table_insert(features, strdup(feature), GINT_TO_POINTER(1)); + g_hash_table_insert(features, g_strdup(feature), GINT_TO_POINTER(1)); } else { void* refcountp = g_hash_table_lookup(features, feature); int refcount = GPOINTER_TO_INT(refcountp); refcount++; - g_hash_table_replace(features, strdup(feature), GINT_TO_POINTER(refcount)); + g_hash_table_replace(features, g_strdup(feature), GINT_TO_POINTER(refcount)); } } @@ -118,7 +118,7 @@ disco_remove_features(const char* plugin_name) g_hash_table_remove(features, feature); } else { refcount--; - g_hash_table_replace(features, strdup(feature), GINT_TO_POINTER(refcount)); + g_hash_table_replace(features, g_strdup(feature), GINT_TO_POINTER(refcount)); } } diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c index 52ec9db8c..7e14859e3 100644 --- a/src/plugins/plugins.c +++ b/src/plugins/plugins.c @@ -108,7 +108,7 @@ void plugins_init(void) { prof_add_shutdown_routine(_plugins_shutdown); - plugins = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL); + plugins = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); callbacks_init(); autocompleters_init(); plugin_themes_init(); @@ -133,7 +133,7 @@ plugins_init(void) if (g_str_has_suffix(filename, ".py")) { ProfPlugin* plugin = python_plugin_create(filename); if (plugin) { - g_hash_table_insert(plugins, strdup(filename), plugin); + g_hash_table_insert(plugins, g_strdup(filename), plugin); loaded = TRUE; } } @@ -142,7 +142,7 @@ plugins_init(void) if (g_str_has_suffix(filename, ".so")) { ProfPlugin* plugin = c_plugin_create(filename); if (plugin) { - g_hash_table_insert(plugins, strdup(filename), plugin); + g_hash_table_insert(plugins, g_strdup(filename), plugin); loaded = TRUE; } } @@ -171,14 +171,14 @@ plugins_free_install_result(PluginsInstallResult* result) if (!result) { return; } - g_slist_free_full(result->installed, free); - g_slist_free_full(result->failed, free); + g_slist_free_full(result->installed, g_free); + g_slist_free_full(result->failed, g_free); } PluginsInstallResult* plugins_install_all(const char* const path) { - PluginsInstallResult* result = malloc(sizeof(PluginsInstallResult)); + PluginsInstallResult* result = g_new0(PluginsInstallResult, 1); result->installed = NULL; result->failed = NULL; GSList* contents = NULL; @@ -191,9 +191,9 @@ plugins_install_all(const char* const path) if (g_str_has_suffix(curr->data, ".py") || g_str_has_suffix(curr->data, ".so")) { gchar* plugin_name = g_path_get_basename(curr->data); if (plugins_install(plugin_name, curr->data, error_message)) { - result->installed = g_slist_append(result->installed, strdup(curr->data)); + result->installed = g_slist_append(result->installed, g_strdup(curr->data)); } else { - result->failed = g_slist_append(result->failed, strdup(curr->data)); + result->failed = g_slist_append(result->failed, g_strdup(curr->data)); } } curr = g_slist_next(curr); @@ -253,7 +253,7 @@ plugins_load_all(void) while (curr) { error_message = g_string_new(NULL); if (plugins_load(curr->data, error_message)) { - loaded = g_slist_append(loaded, strdup(curr->data)); + loaded = g_slist_append(loaded, g_strdup(curr->data)); } curr = g_slist_next(curr); g_string_free(error_message, TRUE); @@ -288,7 +288,7 @@ plugins_load(const char* const name, GString* error_message) #endif } if (plugin) { - g_hash_table_insert(plugins, strdup(name), plugin); + g_hash_table_insert(plugins, g_strdup(name), plugin); if (connection_get_status() == JABBER_CONNECTED) { plugin->init_func(plugin, PACKAGE_VERSION, PACKAGE_STATUS, session_get_account_name(), connection_get_fulljid()); } else { @@ -311,7 +311,7 @@ plugins_unload_all(void) GList* plugin_names_dup = NULL; GList* curr = plugin_names; while (curr) { - plugin_names_dup = g_list_append(plugin_names_dup, strdup(curr->data)); + plugin_names_dup = g_list_append(plugin_names_dup, g_strdup(curr->data)); curr = g_list_next(curr); } g_list_free(plugin_names); @@ -324,7 +324,7 @@ plugins_unload_all(void) curr = g_list_next(curr); } - g_list_free_full(plugin_names_dup, free); + g_list_free_full(plugin_names_dup, g_free); return result; } @@ -366,7 +366,7 @@ plugins_reload_all(void) GList* plugin_names_dup = NULL; GList* curr = plugin_names; while (curr) { - plugin_names_dup = g_list_append(plugin_names_dup, strdup(curr->data)); + plugin_names_dup = g_list_append(plugin_names_dup, g_strdup(curr->data)); curr = g_list_next(curr); } g_list_free(plugin_names); @@ -380,7 +380,7 @@ plugins_reload_all(void) curr = g_list_next(curr); } - g_list_free_full(plugin_names_dup, free); + g_list_free_full(plugin_names_dup, g_free); } gboolean @@ -409,7 +409,7 @@ _plugins_unloaded_list_dir(const gchar* const dir, GSList** result) while (plugin) { ProfPlugin* found = g_hash_table_lookup(plugins, plugin); if ((g_str_has_suffix(plugin, ".so") || g_str_has_suffix(plugin, ".py")) && !found) { - *result = g_slist_append(*result, strdup(plugin)); + *result = g_slist_append(*result, g_strdup(plugin)); } plugin = g_dir_read_name(plugins_dir); } @@ -520,15 +520,15 @@ plugins_pre_chat_message_display(const char* const barejid, const char* const re return NULL; } - char* new_message = NULL; - char* curr_message = strdup(message); + gchar* new_message = NULL; + gchar* curr_message = g_strdup(message); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; new_message = plugin->pre_chat_message_display(plugin, barejid, resource, curr_message); if (new_message) { - free(curr_message); + g_free(curr_message); curr_message = new_message; } curr = g_list_next(curr); @@ -559,15 +559,15 @@ plugins_pre_chat_message_send(const char* const barejid, const char* message) return NULL; } - char* new_message = NULL; - char* curr_message = strdup(message); + gchar* new_message = NULL; + gchar* curr_message = g_strdup(message); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; if (plugin->contains_hook(plugin, "prof_pre_chat_message_send")) { new_message = plugin->pre_chat_message_send(plugin, barejid, curr_message); - free(curr_message); + g_free(curr_message); if (new_message) { curr_message = new_message; } else { @@ -604,15 +604,15 @@ plugins_pre_room_message_display(const char* const barejid, const char* const ni return NULL; } - char* new_message = NULL; - char* curr_message = strdup(message); + gchar* new_message = NULL; + gchar* curr_message = g_strdup(message); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; new_message = plugin->pre_room_message_display(plugin, barejid, nick, curr_message); if (new_message) { - free(curr_message); + g_free(curr_message); curr_message = new_message; } curr = g_list_next(curr); @@ -643,15 +643,15 @@ plugins_pre_room_message_send(const char* const barejid, const char* message) return NULL; } - char* new_message = NULL; - char* curr_message = strdup(message); + gchar* new_message = NULL; + gchar* curr_message = g_strdup(message); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; if (plugin->contains_hook(plugin, "prof_pre_room_message_send")) { new_message = plugin->pre_room_message_send(plugin, barejid, curr_message); - free(curr_message); + g_free(curr_message); if (new_message) { curr_message = new_message; } else { @@ -700,7 +700,7 @@ plugins_on_room_history_message(const char* const barejid, const char* const nic } g_list_free(values); - free(timestamp_str); + g_free(timestamp_str); } char* @@ -712,15 +712,15 @@ plugins_pre_priv_message_display(const char* const fulljid, const char* message) } auto_jid Jid* jidp = jid_create(fulljid); - char* new_message = NULL; - char* curr_message = strdup(message); + gchar* new_message = NULL; + gchar* curr_message = g_strdup(message); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; new_message = plugin->pre_priv_message_display(plugin, jidp->barejid, jidp->resourcepart, curr_message); if (new_message) { - free(curr_message); + g_free(curr_message); curr_message = new_message; } curr = g_list_next(curr); @@ -753,15 +753,15 @@ plugins_pre_priv_message_send(const char* const fulljid, const char* const messa } auto_jid Jid* jidp = jid_create(fulljid); - char* new_message = NULL; - char* curr_message = strdup(message); + gchar* new_message = NULL; + gchar* curr_message = g_strdup(message); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; if (plugin->contains_hook(plugin, "prof_pre_priv_message_send")) { new_message = plugin->pre_priv_message_send(plugin, jidp->barejid, jidp->resourcepart, curr_message); - free(curr_message); + g_free(curr_message); if (new_message) { curr_message = new_message; } else { @@ -801,15 +801,15 @@ plugins_on_message_stanza_send(const char* const text) return NULL; } - char* new_stanza = NULL; - char* curr_stanza = strdup(text); + gchar* new_stanza = NULL; + gchar* curr_stanza = g_strdup(text); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; new_stanza = plugin->on_message_stanza_send(plugin, curr_stanza); if (new_stanza) { - free(curr_stanza); + g_free(curr_stanza); curr_stanza = new_stanza; } curr = g_list_next(curr); @@ -847,15 +847,15 @@ plugins_on_presence_stanza_send(const char* const text) return NULL; } - char* new_stanza = NULL; - char* curr_stanza = strdup(text); + gchar* new_stanza = NULL; + gchar* curr_stanza = g_strdup(text); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; new_stanza = plugin->on_presence_stanza_send(plugin, curr_stanza); if (new_stanza) { - free(curr_stanza); + g_free(curr_stanza); curr_stanza = new_stanza; } curr = g_list_next(curr); @@ -894,14 +894,14 @@ plugins_on_iq_stanza_send(const char* const text) } char* new_stanza = NULL; - char* curr_stanza = strdup(text); + char* curr_stanza = g_strdup(text); GList* curr = values; while (curr) { ProfPlugin* plugin = curr->data; new_stanza = plugin->on_iq_stanza_send(plugin, curr_stanza); if (new_stanza) { - free(curr_stanza); + g_free(curr_stanza); curr_stanza = new_stanza; } curr = g_list_next(curr); diff --git a/src/plugins/python_api.c b/src/plugins/python_api.c index 572226876..6b6dc0936 100644 --- a/src/plugins/python_api.c +++ b/src/plugins/python_api.c @@ -451,10 +451,10 @@ python_api_get_name_from_roster(PyObject* self, PyObject* args) Py_RETURN_NONE; } - char* barejid_str = python_str_or_unicode_to_string(barejid); + gchar* barejid_str = python_str_or_unicode_to_string(barejid); allow_python_threads(); - char* name = strdup(roster_get_display_name(barejid_str)); + gchar* name = g_strdup(roster_get_display_name(barejid_str)); free(barejid_str); disable_python_threads(); if (name) { @@ -1630,16 +1630,16 @@ _python_plugin_name(void) #if PY_VERSION_HEX >= 0x030B0000 PyFrameObject* frame = PyThreadState_GetFrame(ts); PyCodeObject* code = PyFrame_GetCode(frame); - char* filename = python_str_or_unicode_to_string(code->co_filename); + gchar* filename = python_str_or_unicode_to_string(code->co_filename); Py_DECREF(code); Py_DECREF(frame); #else PyFrameObject* frame = ts->frame; - char* filename = python_str_or_unicode_to_string(frame->f_code->co_filename); + gchar* filename = python_str_or_unicode_to_string(frame->f_code->co_filename); #endif gchar** split = g_strsplit(filename, "/", 0); free(filename); - char* plugin_name = strdup(split[g_strv_length(split) - 1]); + gchar* plugin_name = g_strdup(split[g_strv_length(split) - 1]); g_strfreev(split); return plugin_name; @@ -1659,20 +1659,20 @@ python_str_or_unicode_to_string(void* obj) #ifdef PY_IS_PYTHON3 if (PyUnicode_Check(pyobj)) { PyObject* utf8_str = PyUnicode_AsUTF8String(pyobj); - char* result = strdup(PyBytes_AS_STRING(utf8_str)); + gchar* result = g_strdup(PyBytes_AS_STRING(utf8_str)); Py_XDECREF(utf8_str); return result; } else { - return strdup(PyBytes_AS_STRING(pyobj)); + return g_strdup(PyBytes_AS_STRING(pyobj)); } #else if (PyUnicode_Check(pyobj)) { PyObject* utf8_str = PyUnicode_AsUTF8String(pyobj); - char* result = strdup(PyString_AsString(utf8_str)); + gchar* result = g_strdup(PyString_AsString(utf8_str)); Py_XDECREF(utf8_str); return result; } else { - return strdup(PyString_AsString(pyobj)); + return g_strdup(PyString_AsString(pyobj)); } #endif } diff --git a/src/plugins/python_plugins.c b/src/plugins/python_plugins.c index 29dee4b7e..7579691cd 100644 --- a/src/plugins/python_plugins.c +++ b/src/plugins/python_plugins.c @@ -130,8 +130,8 @@ python_plugin_create(const char* const filename) python_check_error(); if (p_module) { - ProfPlugin* plugin = malloc(sizeof(ProfPlugin)); - plugin->name = strdup(filename); + ProfPlugin* plugin = g_new0(ProfPlugin, 1); + plugin->name = g_strdup(filename); plugin->lang = LANG_PYTHON; plugin->module = p_module; plugin->init_func = python_init_hook; diff --git a/src/plugins/settings.c b/src/plugins/settings.c index c946b38cc..e8c60c7c9 100644 --- a/src/plugins/settings.c +++ b/src/plugins/settings.c @@ -88,7 +88,7 @@ plugin_settings_string_get(const char* const group, const char* const key, const if (group && key && g_key_file_has_key(settings, group, key, NULL)) { return g_key_file_get_string(settings, group, key, NULL); } else if (def) { - return strdup(def); + return g_strdup(def); } else { return NULL; } diff --git a/src/profanity.c b/src/profanity.c index 0694f4bb7..cd218e0a7 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -113,7 +113,7 @@ prof_run(gchar* log_level, gchar* account_name, gchar* config_file, gchar* log_f char* line = NULL; GTimer* waittimer = g_timer_new(); g_timer_stop(waittimer); - int waittime; + int waittime = 0; while (cont && !force_quit) { log_stderr_handler(); session_check_autoaway(); @@ -292,7 +292,7 @@ prof_add_shutdown_routine(void (*routine)(void)) if (g_list_find_custom(shutdown_routines, &this, (GCompareFunc)_cmp_shutdown_routine)) { return; } - struct shutdown_routine* r = malloc(sizeof *r); + struct shutdown_routine* r = g_new(struct shutdown_routine, 1); r->routine = routine; shutdown_routines = g_list_prepend(shutdown_routines, r); } diff --git a/src/tools/aesgcm_download.c b/src/tools/aesgcm_download.c index 6daece5b5..05b46b55c 100644 --- a/src/tools/aesgcm_download.c +++ b/src/tools/aesgcm_download.c @@ -101,7 +101,7 @@ aesgcm_file_get(void* userdata) // We wrap the HTTPDownload tool and use it for retrieving the ciphertext // and storing it in the temporary file previously opened. - HTTPDownload* http_dl = calloc(1, sizeof(HTTPDownload)); + HTTPDownload* http_dl = g_new0(HTTPDownload, 1); http_dl->window = aesgcm_dl->window; http_dl->worker = aesgcm_dl->worker; http_dl->id = strdup(aesgcm_dl->id); diff --git a/src/tools/aesgcm_download.h b/src/tools/aesgcm_download.h index 796b9389a..37e15ff0f 100644 --- a/src/tools/aesgcm_download.h +++ b/src/tools/aesgcm_download.h @@ -50,7 +50,7 @@ typedef struct aesgcm_download_t { - char* id; + gchar* id; char* url; char* filename; char* cmd_template; diff --git a/src/tools/autocomplete.c b/src/tools/autocomplete.c index 7c4cc5347..9853b0355 100644 --- a/src/tools/autocomplete.c +++ b/src/tools/autocomplete.c @@ -62,7 +62,7 @@ static gchar* _search(Autocomplete ac, GList* curr, gboolean quote, search_direc Autocomplete autocomplete_new(void) { - return calloc(1, sizeof(struct autocomplete_t)); + return g_new0(struct autocomplete_t, 1); } void diff --git a/src/tools/http_download.c b/src/tools/http_download.c index 62ce8aa3b..4f5e3b71d 100644 --- a/src/tools/http_download.c +++ b/src/tools/http_download.c @@ -177,7 +177,7 @@ http_file_get(void* userdata) err = strdup(curl_easy_strerror(res)); } - if (ftell(outfh) == 0) { + if (!err && ftell(outfh) == 0) { err = strdup("Output file is empty."); } @@ -185,7 +185,9 @@ http_file_get(void* userdata) curl_global_cleanup(); if (fclose(outfh) == EOF) { - err = strdup(g_strerror(errno)); + if (!err) { + err = strdup(g_strerror(errno)); + } } pthread_mutex_lock(&lock); @@ -211,7 +213,9 @@ http_file_get(void* userdata) win_mark_received(download->window, download->id); if (download->return_bytes_received) { ret = malloc(sizeof(*ret)); - *ret = download->bytes_received; + if (ret) { + *ret = download->bytes_received; + } } } } diff --git a/src/ui/buffer.c b/src/ui/buffer.c index 1223d5201..f95da438e 100644 --- a/src/ui/buffer.c +++ b/src/ui/buffer.c @@ -192,7 +192,7 @@ buffer_get_entry_by_id(ProfBuff buffer, const char* const id) static ProfBuffEntry* _create_entry(const char* show_char, int pad_indent, GDateTime* time, int flags, theme_item_t theme_item, const char* const display_from, const char* const from_jid, const char* const message, DeliveryReceipt* receipt, const char* const id, int y_start_pos, int y_end_pos) { - ProfBuffEntry* e = malloc(sizeof(struct prof_buff_entry_t)); + ProfBuffEntry* e = g_new0(ProfBuffEntry, 1); e->show_char = STRDUP_OR_NULL(show_char); e->pad_indent = pad_indent; e->flags = flags; diff --git a/src/ui/console.c b/src/ui/console.c index bea715ace..85927f154 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1319,7 +1319,7 @@ cons_occupants_setting(void) else cons_show("Occupants wrap (/occupants) : OFF"); - auto_char char* occupants_ch = prefs_get_occupants_char(); + auto_gchar gchar* occupants_ch = prefs_get_occupants_char(); if (occupants_ch) { cons_show("Occupants char (/occupants) : %s", occupants_ch); } else { @@ -1332,7 +1332,7 @@ cons_occupants_setting(void) int size = prefs_get_occupants_size(); cons_show("Occupants size (/occupants) : %d", size); - auto_char char* header_ch = prefs_get_occupants_header_char(); + auto_gchar gchar* header_ch = prefs_get_occupants_header_char(); if (header_ch) { cons_show("Occupants header char (/occupants) : %s", header_ch); } else { @@ -1449,42 +1449,42 @@ cons_roster_setting(void) else cons_show("Roster offline (/roster) : hide"); - auto_char char* header_ch = prefs_get_roster_header_char(); + auto_gchar gchar* header_ch = prefs_get_roster_header_char(); if (header_ch) { cons_show("Roster header char (/roster) : %s", header_ch); } else { cons_show("Roster header char (/roster) : none"); } - auto_char char* contact_ch = prefs_get_roster_contact_char(); + auto_gchar gchar* contact_ch = prefs_get_roster_contact_char(); if (contact_ch) { cons_show("Roster contact char (/roster) : %s", contact_ch); } else { cons_show("Roster contact char (/roster) : none"); } - auto_char char* resource_ch = prefs_get_roster_resource_char(); + auto_gchar gchar* resource_ch = prefs_get_roster_resource_char(); if (resource_ch) { cons_show("Roster resource char (/roster) : %s", resource_ch); } else { cons_show("Roster resource char (/roster) : none"); } - auto_char char* room_ch = prefs_get_roster_room_char(); + auto_gchar gchar* room_ch = prefs_get_roster_room_char(); if (room_ch) { cons_show("Roster room char (/roster) : %s", room_ch); } else { cons_show("Roster room char (/roster) : none"); } - auto_char char* room_priv_ch = prefs_get_roster_room_private_char(); + auto_gchar gchar* room_priv_ch = prefs_get_roster_room_private_char(); if (room_priv_ch) { cons_show("Roster room private char (/roster) : %s", room_priv_ch); } else { cons_show("Roster room private char (/roster) : none"); } - auto_char char* private_ch = prefs_get_roster_private_char(); + auto_gchar gchar* private_ch = prefs_get_roster_private_char(); if (private_ch) { cons_show("Roster private char (/roster) : %s", private_ch); } else { diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index 4a1ae2640..501e01580 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -578,7 +578,7 @@ _rosterwin_resources(ProfLayoutSplit* layout, PContact contact, int current_inde g_string_append(msg, " "); this_indent--; } - auto_char char* ch = prefs_get_roster_resource_char(); + auto_gchar gchar* ch = prefs_get_roster_resource_char(); if (ch) { g_string_append_printf(msg, "%s", ch); } diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index 18d0e5953..ad080a264 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -97,12 +97,12 @@ status_bar_init(void) { tz = g_time_zone_new_local(); - statusbar = malloc(sizeof(StatusBar)); + statusbar = g_new0(StatusBar, 1); statusbar->time = NULL; statusbar->prompt = NULL; statusbar->fulljid = NULL; statusbar->tabs = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)_destroy_tab); - StatusBarTab* console = calloc(1, sizeof(StatusBarTab)); + StatusBarTab* console = g_new0(StatusBarTab, 1); console->window_type = WIN_CONSOLE; console->identifier = strdup("console"); console->display_name = NULL; @@ -190,7 +190,7 @@ _create_tab(const int win, win_type_t wintype, char* identifier, gboolean highli { int true_win = win == 0 ? 10 : win; - StatusBarTab* tab = malloc(sizeof(StatusBarTab)); + StatusBarTab* tab = g_new0(StatusBarTab, 1); tab->identifier = strdup(identifier); tab->highlight = highlight; tab->window_type = wintype; diff --git a/src/ui/window.c b/src/ui/window.c index 0d7f821f5..cd9b3ae65 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -96,7 +96,7 @@ _win_create_simple_layout(void) { int cols = getmaxx(stdscr); - ProfLayoutSimple* layout = malloc(sizeof(ProfLayoutSimple)); + ProfLayoutSimple* layout = g_new0(ProfLayoutSimple, 1); layout->base.type = LAYOUT_SIMPLE; layout->base.win = newpad(PAD_SIZE, cols); wbkgd(layout->base.win, theme_attrs(THEME_TEXT)); @@ -113,7 +113,7 @@ _win_create_split_layout(void) { int cols = getmaxx(stdscr); - ProfLayoutSplit* layout = malloc(sizeof(ProfLayoutSplit)); + ProfLayoutSplit* layout = g_new0(ProfLayoutSplit, 1); layout->base.type = LAYOUT_SPLIT; layout->base.win = newpad(PAD_SIZE, cols); wbkgd(layout->base.win, theme_attrs(THEME_TEXT)); @@ -131,7 +131,7 @@ _win_create_split_layout(void) ProfWin* win_create_console(void) { - ProfConsoleWin* new_win = malloc(sizeof(ProfConsoleWin)); + ProfConsoleWin* new_win = g_new0(ProfConsoleWin, 1); new_win->window.type = WIN_CONSOLE; new_win->window.scroll_state = WIN_SCROLL_INNER; new_win->window.layout = _win_create_split_layout(); @@ -142,7 +142,7 @@ win_create_console(void) ProfWin* win_create_chat(const char* const barejid) { - ProfChatWin* new_win = malloc(sizeof(ProfChatWin)); + ProfChatWin* new_win = g_new0(ProfChatWin, 1); new_win->window.type = WIN_CHAT; new_win->window.scroll_state = WIN_SCROLL_INNER; new_win->window.layout = _win_create_simple_layout(); @@ -172,12 +172,12 @@ win_create_chat(const char* const barejid) ProfWin* win_create_muc(const char* const roomjid) { - ProfMucWin* new_win = malloc(sizeof(ProfMucWin)); + ProfMucWin* new_win = g_new0(ProfMucWin, 1); int cols = getmaxx(stdscr); new_win->window.type = WIN_MUC; new_win->window.scroll_state = WIN_SCROLL_INNER; - ProfLayoutSplit* layout = malloc(sizeof(ProfLayoutSplit)); + ProfLayoutSplit* layout = g_new0(ProfLayoutSplit, 1); layout->base.type = LAYOUT_SPLIT; if (prefs_get_boolean(PREF_OCCUPANTS)) { @@ -229,7 +229,7 @@ win_create_muc(const char* const roomjid) ProfWin* win_create_config(const char* const roomjid, DataForm* form, ProfConfWinCallback submit, ProfConfWinCallback cancel, const void* userdata) { - ProfConfWin* new_win = malloc(sizeof(ProfConfWin)); + ProfConfWin* new_win = g_new0(ProfConfWin, 1); new_win->window.type = WIN_CONFIG; new_win->window.scroll_state = WIN_SCROLL_INNER; new_win->window.layout = _win_create_simple_layout(); @@ -247,7 +247,7 @@ win_create_config(const char* const roomjid, DataForm* form, ProfConfWinCallback ProfWin* win_create_private(const char* const fulljid) { - ProfPrivateWin* new_win = malloc(sizeof(ProfPrivateWin)); + ProfPrivateWin* new_win = g_new0(ProfPrivateWin, 1); new_win->window.type = WIN_PRIVATE; new_win->window.scroll_state = WIN_SCROLL_INNER; new_win->window.layout = _win_create_simple_layout(); @@ -264,7 +264,7 @@ win_create_private(const char* const fulljid) ProfWin* win_create_xmlconsole(void) { - ProfXMLWin* new_win = malloc(sizeof(ProfXMLWin)); + ProfXMLWin* new_win = g_new0(ProfXMLWin, 1); new_win->window.type = WIN_XML; new_win->window.scroll_state = WIN_SCROLL_INNER; new_win->window.layout = _win_create_simple_layout(); @@ -277,7 +277,7 @@ win_create_xmlconsole(void) ProfWin* win_create_plugin(const char* const plugin_name, const char* const tag) { - ProfPluginWin* new_win = malloc(sizeof(ProfPluginWin)); + ProfPluginWin* new_win = g_new0(ProfPluginWin, 1); new_win->window.type = WIN_PLUGIN; new_win->window.scroll_state = WIN_SCROLL_INNER; new_win->window.layout = _win_create_simple_layout(); @@ -293,7 +293,7 @@ win_create_plugin(const char* const plugin_name, const char* const tag) ProfWin* win_create_vcard(vCard* vcard) { - ProfVcardWin* new_win = malloc(sizeof(ProfVcardWin)); + ProfVcardWin* new_win = g_new0(ProfVcardWin, 1); new_win->window.type = WIN_VCARD; new_win->window.scroll_state = WIN_SCROLL_INNER; new_win->window.layout = _win_create_simple_layout(); @@ -1622,7 +1622,7 @@ win_print_outgoing_with_receipt(ProfWin* window, const char* show_char, const ch { GDateTime* time = g_date_time_new_now_local(); - DeliveryReceipt* receipt = malloc(sizeof(struct delivery_receipt_t)); + DeliveryReceipt* receipt = g_new0(struct delivery_receipt_t, 1); receipt->received = FALSE; const char* myjid = connection_get_fulljid(); @@ -1844,7 +1844,7 @@ _win_print_wrapped(WINDOW* win, const char* const message, size_t indent, int pa { int starty = getcury(win); int wordi = 0; - auto_char char* word = malloc(strlen(message) + 1); + auto_gchar gchar* word = g_malloc(strlen(message) + 1); gchar* curr_ch = g_utf8_offset_to_pointer(message, 0); diff --git a/src/xmpp/avatar.c b/src/xmpp/avatar.c index e7788bc56..86a1ee839 100644 --- a/src/xmpp/avatar.c +++ b/src/xmpp/avatar.c @@ -232,7 +232,7 @@ _avatar_metadata_handler(xmpp_stanza_t* const stanza, void* const userdata) if (id && type) { log_debug("Avatar ID for %s is: %s", from, id); - avatar_metadata* data = malloc(sizeof(avatar_metadata)); + avatar_metadata* data = g_new0(avatar_metadata, 1); if (data) { data->type = strdup(type); data->id = strdup(id); diff --git a/src/xmpp/bookmark.c b/src/xmpp/bookmark.c index 0e6a23b34..f7ee17594 100644 --- a/src/xmpp/bookmark.c +++ b/src/xmpp/bookmark.c @@ -112,7 +112,7 @@ bookmark_add(const char* jid, const char* nick, const char* password, const char return FALSE; } - Bookmark* bookmark = malloc(sizeof(Bookmark)); + Bookmark* bookmark = g_new0(Bookmark, 1); bookmark->barejid = strdup(jid); if (nick) { bookmark->nick = strdup(nick); @@ -329,7 +329,7 @@ _bookmark_result_id_handler(xmpp_stanza_t* const stanza, void* const userdata) } autocomplete_add(bookmark_ac, barejid); - Bookmark* bookmark = malloc(sizeof(Bookmark)); + Bookmark* bookmark = g_new0(Bookmark, 1); bookmark->barejid = strdup(barejid); bookmark->nick = nick; bookmark->password = password; diff --git a/src/xmpp/capabilities.c b/src/xmpp/capabilities.c index 112b83451..69e092c61 100644 --- a/src/xmpp/capabilities.c +++ b/src/xmpp/capabilities.c @@ -189,10 +189,10 @@ caps_create(const char* const category, const char* const type, const char* cons const char* const os, const char* const os_version, GSList* features) { - EntityCapabilities* result = (EntityCapabilities*)malloc(sizeof(EntityCapabilities)); + EntityCapabilities* result = g_new0(EntityCapabilities, 1); if (category || type || name) { - DiscoIdentity* identity = (DiscoIdentity*)malloc(sizeof(DiscoIdentity)); + DiscoIdentity* identity = g_new0(DiscoIdentity, 1); identity->category = category ? strdup(category) : NULL; identity->type = type ? strdup(type) : NULL; identity->name = name ? strdup(name) : NULL; @@ -202,7 +202,7 @@ caps_create(const char* const category, const char* const type, const char* cons } if (software || software_version || os || os_version) { - SoftwareVersion* software_versionp = (SoftwareVersion*)malloc(sizeof(SoftwareVersion)); + SoftwareVersion* software_versionp = g_new0(SoftwareVersion, 1); software_versionp->software = software ? strdup(software) : NULL; software_versionp->software_version = software_version ? strdup(software_version) : NULL; software_versionp->os = os ? strdup(os) : NULL; diff --git a/src/xmpp/chat_session.c b/src/xmpp/chat_session.c index 0f5f03c2c..1dfdf215d 100644 --- a/src/xmpp/chat_session.c +++ b/src/xmpp/chat_session.c @@ -56,7 +56,7 @@ _chat_session_new(const char* const barejid, const char* const resource, gboolea assert(barejid != NULL); assert(resource != NULL); - ChatSession* new_session = calloc(1, sizeof(*new_session)); + ChatSession* new_session = g_new0(ChatSession, 1); new_session->barejid = strdup(barejid); new_session->resource = strdup(resource); new_session->resource_override = resource_override; diff --git a/src/xmpp/chat_state.c b/src/xmpp/chat_state.c index 2ebe7459c..4e6dec71b 100644 --- a/src/xmpp/chat_state.c +++ b/src/xmpp/chat_state.c @@ -55,7 +55,7 @@ static void _send_if_supported(const char* const barejid, void (*send_func)(cons ChatState* chat_state_new(void) { - ChatState* new_state = malloc(sizeof(struct prof_chat_state_t)); + ChatState* new_state = g_new0(struct prof_chat_state_t, 1); new_state->type = CHAT_STATE_GONE; new_state->timer = g_timer_new(); diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c index 975627860..1645db988 100644 --- a/src/xmpp/connection.c +++ b/src/xmpp/connection.c @@ -244,7 +244,7 @@ _conn_apply_settings(const char* const jid, const char* const passwd, const char return FALSE; } - auto_char char* cert_path = prefs_get_tls_certpath(); + auto_gchar gchar* cert_path = prefs_get_tls_certpath(); if (cert_path) { xmpp_conn_set_capath(conn.xmpp_conn, cert_path); } @@ -830,10 +830,10 @@ connection_free_uuid(char* uuid) } } -char* +gchar* connection_create_stanza_id(void) { - auto_char char* rndid = get_random_string(CON_RAND_ID_LEN); + auto_gchar gchar* rndid = get_random_string(CON_RAND_ID_LEN); assert(rndid != NULL); auto_gchar gchar* hmac = g_compute_hmac_for_string(G_CHECKSUM_SHA1, @@ -1027,8 +1027,12 @@ _connection_handler(xmpp_conn_t* const xmpp_conn, const xmpp_conn_event_t status conn.sm_state = xmpp_conn_get_sm_state(conn.xmpp_conn); if (send_queue_len > 0 && prefs_get_boolean(PREF_STROPHE_SM_RESEND)) { conn.queued_messages = calloc(send_queue_len + 1, sizeof(*conn.queued_messages)); - for (int n = 0; n < send_queue_len && conn.queued_messages[n]; ++n) { - conn.queued_messages[n] = xmpp_conn_send_queue_drop_element(conn.xmpp_conn, XMPP_QUEUE_OLDEST); + if (conn.queued_messages == NULL) { + log_error("Failed to allocate memory for queued messages during disconnection."); + } else { + for (int n = 0; n < send_queue_len; ++n) { + conn.queued_messages[n] = xmpp_conn_send_queue_drop_element(conn.xmpp_conn, XMPP_QUEUE_OLDEST); + } } } else if (send_queue_len > 0) { log_debug("Connection handler: dropping those messages since SM RESEND is disabled"); diff --git a/src/xmpp/contact.c b/src/xmpp/contact.c index fd2889b95..e92254725 100644 --- a/src/xmpp/contact.c +++ b/src/xmpp/contact.c @@ -66,7 +66,7 @@ p_contact_new(const char* const barejid, const char* const name, GSList* groups, const char* const subscription, const char* const offline_message, gboolean pending_out) { - PContact contact = malloc(sizeof(struct p_contact_t)); + PContact contact = g_new0(struct p_contact_t, 1); contact->barejid = strdup(barejid); contact->barejid_collate_key = g_utf8_collate_key(contact->barejid, -1); diff --git a/src/xmpp/form.c b/src/xmpp/form.c index 5290c83fc..8f9e0bc90 100644 --- a/src/xmpp/form.c +++ b/src/xmpp/form.c @@ -74,7 +74,7 @@ _is_valid_form_element(xmpp_stanza_t* stanza) static DataForm* _form_new(void) { - DataForm* form = calloc(1, sizeof(DataForm)); + DataForm* form = g_new0(DataForm, 1); return form; } @@ -82,7 +82,7 @@ _form_new(void) static FormField* _field_new(void) { - FormField* field = calloc(1, sizeof(FormField)); + FormField* field = g_new0(FormField, 1); return field; } @@ -237,7 +237,7 @@ form_create(xmpp_stanza_t* const form_stanza) // handle options } else if (g_strcmp0(child_name, "option") == 0) { - FormOption* option = malloc(sizeof(FormOption)); + FormOption* option = g_new0(FormOption, 1); option->label = _get_attr(field_child, "label"); option->value = _get_property(field_child, "value"); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 4c3330626..ebf7c1a7c 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -364,14 +364,19 @@ _iq_id_handler_free(ProfIqHandler* handler) void iq_id_handler_add(const char* const id, ProfIqCallback func, ProfIqFreeCallback free_func, void* userdata) { - ProfIqHandler* handler = malloc(sizeof(ProfIqHandler)); - if (handler) { - handler->func = func; - handler->free_func = free_func; - handler->userdata = userdata; - - g_hash_table_insert(id_handlers, strdup(id), handler); + if (id == NULL) { + if (free_func) { + free_func(userdata); + } + return; } + + ProfIqHandler* handler = g_new0(ProfIqHandler, 1); + handler->func = func; + handler->free_func = free_func; + handler->userdata = userdata; + + g_hash_table_insert(id_handlers, strdup(id), handler); } void @@ -551,7 +556,7 @@ iq_room_info_request(const char* const room, gboolean display_result) auto_char char* id = connection_create_stanza_id(); xmpp_stanza_t* iq = stanza_create_disco_info_iq(ctx, id, room, NULL); - ProfRoomInfoData* cb_data = malloc(sizeof(ProfRoomInfoData)); + ProfRoomInfoData* cb_data = g_new0(ProfRoomInfoData, 1); if (cb_data) { cb_data->room = strdup(room); cb_data->display = display_result; @@ -735,7 +740,7 @@ iq_room_affiliation_list(const char* const room, char* affiliation, bool show_ui const char* id = xmpp_stanza_get_id(iq); - ProfAffiliationList* affiliation_list = malloc(sizeof(ProfAffiliationList)); + ProfAffiliationList* affiliation_list = g_new0(ProfAffiliationList, 1); if (affiliation_list) { affiliation_list->affiliation = strdup(affiliation); affiliation_list->show_ui_message = show_ui_message; @@ -769,7 +774,7 @@ iq_room_affiliation_set(const char* const room, const char* const jid, char* aff const char* id = xmpp_stanza_get_id(iq); - ProfPrivilegeSet* affiliation_set = malloc(sizeof(struct privilege_set_t)); + ProfPrivilegeSet* affiliation_set = g_new0(struct privilege_set_t, 1); if (affiliation_set) { affiliation_set->item = strdup(jid); affiliation_set->privilege = strdup(affiliation); @@ -790,7 +795,7 @@ iq_room_role_set(const char* const room, const char* const nick, char* role, const char* id = xmpp_stanza_get_id(iq); - struct privilege_set_t* role_set = malloc(sizeof(ProfPrivilegeSet)); + struct privilege_set_t* role_set = g_new0(ProfPrivilegeSet, 1); if (role_set) { role_set->item = strdup(nick); role_set->privilege = strdup(role); @@ -1333,7 +1338,7 @@ _command_exec_response_handler(xmpp_stanza_t* const stanza, void* const userdata const char* sessionid = xmpp_stanza_get_attribute(cmd, "sessionid"); DataForm* form = form_create(x); - CommandConfigData* data = malloc(sizeof(CommandConfigData)); + CommandConfigData* data = g_new0(CommandConfigData, 1); if (sessionid == NULL) { data->sessionid = NULL; } else { @@ -2212,7 +2217,7 @@ _room_info_response_id_handler(xmpp_stanza_t* const stanza, void* const userdata const char* category = xmpp_stanza_get_attribute(child, STANZA_ATTR_CATEGORY); if (name || category || type) { - DiscoIdentity* identity = malloc(sizeof(struct disco_identity_t)); + DiscoIdentity* identity = g_new0(struct disco_identity_t, 1); if (identity) { if (name) { @@ -2357,7 +2362,7 @@ _disco_info_response_id_handler(xmpp_stanza_t* const stanza, void* const userdat const char* category = xmpp_stanza_get_attribute(child, STANZA_ATTR_CATEGORY); if (name || category || child_type) { - DiscoIdentity* identity = malloc(sizeof(struct disco_identity_t)); + DiscoIdentity* identity = g_new0(struct disco_identity_t, 1); if (identity) { if (name) { @@ -2541,7 +2546,7 @@ _disco_items_result_handler(xmpp_stanza_t* const stanza) if (stanza_name && (g_strcmp0(stanza_name, STANZA_NAME_ITEM) == 0)) { const char* item_jid = xmpp_stanza_get_attribute(child, STANZA_ATTR_JID); if (item_jid) { - DiscoItem* item = malloc(sizeof(struct disco_item_t)); + DiscoItem* item = g_new0(struct disco_item_t, 1); if (item) { item->jid = strdup(item_jid); const char* item_name = xmpp_stanza_get_attribute(child, STANZA_ATTR_NAME); @@ -2718,7 +2723,7 @@ _iq_mam_request(ProfChatWin* win, GDateTime* startdate, GDateTime* enddate) xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, win->barejid, startdate_str, enddate_str, firstid, NULL); - MamRsmUserdata* data = malloc(sizeof(MamRsmUserdata)); + MamRsmUserdata* data = g_new0(MamRsmUserdata, 1); if (data) { data->start_datestr = startdate_str; data->end_datestr = enddate_str; @@ -2744,7 +2749,7 @@ iq_mam_request(ProfChatWin* win, GDateTime* enddate) // Save request for later if disco items haven't been received yet if (!received_disco_items) { - LateDeliveryUserdata* cur_del_data = malloc(sizeof(LateDeliveryUserdata)); + LateDeliveryUserdata* cur_del_data = g_new0(LateDeliveryUserdata, 1); cur_del_data->win = win; cur_del_data->enddate = enddate; cur_del_data->startdate = startdate; @@ -2783,13 +2788,17 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata) if (data->start_datestr) { start_str = strdup(data->start_datestr); // Convert to iso8601 - start_str[strlen(start_str) - 3] = '\0'; + if (start_str && strlen(start_str) >= 3) { + start_str[strlen(start_str) - 3] = '\0'; + } } - char* end_str = NULL; + auto_char char* end_str = NULL; if (data->end_datestr) { end_str = strdup(data->end_datestr); // Convert to iso8601 - end_str[strlen(end_str) - 3] = '\0'; + if (end_str && strlen(end_str) >= 3) { + end_str[strlen(end_str) - 3] = '\0'; + } } if (is_complete || !data->fetch_next) { @@ -2817,7 +2826,7 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata) } xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, data->barejid, data->start_datestr, NULL, firstid, NULL); - MamRsmUserdata* ndata = malloc(sizeof(*ndata)); + MamRsmUserdata* ndata = g_new0(MamRsmUserdata, 1); *ndata = *data; if (data->end_datestr) ndata->end_datestr = strdup(data->end_datestr); diff --git a/src/xmpp/jid.c b/src/xmpp/jid.c index 6b5bb62cf..96c65f1cb 100644 --- a/src/xmpp/jid.c +++ b/src/xmpp/jid.c @@ -69,13 +69,7 @@ jid_create(const gchar* const str) return NULL; } - result = malloc(sizeof(struct jid_t)); - result->str = NULL; - result->localpart = NULL; - result->domainpart = NULL; - result->resourcepart = NULL; - result->barejid = NULL; - result->fulljid = NULL; + result = g_new0(Jid, 1); result->refcnt = 1; gchar* atp = g_utf8_strchr(trimmed, -1, '@'); @@ -109,9 +103,9 @@ jid_create(const gchar* const str) } Jid* -jid_create_from_bare_and_resource(const char* const barejid, const char* const resource) +jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource) { - auto_char char* jid = create_fulljid(barejid, resource); + auto_gchar gchar* jid = create_fulljid(barejid, resource); return jid_create(jid); } @@ -160,8 +154,8 @@ jid_is_valid_room_form(Jid* jid) * barejid/resourcepart * Will return a newly created string that must be freed by the caller */ -char* -create_fulljid(const char* const barejid, const char* const resource) +gchar* +create_fulljid(const gchar* const barejid, const gchar* const resource) { auto_gchar gchar* barejidlower = g_utf8_strdown(barejid, -1); return g_strdup_printf("%s/%s", barejidlower, resource); @@ -172,11 +166,11 @@ create_fulljid(const char* const barejid, const char* const resource) * Full JID = "test@conference.server/person" * returns "person" */ -char* -get_nick_from_full_jid(const char* const full_room_jid) +gchar* +get_nick_from_full_jid(const gchar* const full_room_jid) { auto_gcharv gchar** tokens = g_strsplit(full_room_jid, "/", 0); - char* nick_part = NULL; + gchar* nick_part = NULL; if (tokens) { if (tokens[0] && tokens[1]) { @@ -190,7 +184,7 @@ get_nick_from_full_jid(const char* const full_room_jid) /* * get the fulljid, fall back to the barejid */ -const char* +const gchar* jid_fulljid_or_barejid(Jid* jid) { if (jid->fulljid) { @@ -203,7 +197,7 @@ jid_fulljid_or_barejid(Jid* jid) gchar* jid_random_resource(void) { - auto_char char* rand = get_random_string(4); + auto_gchar gchar* rand = get_random_string(4); gchar* result = g_strdup_printf("profanity.%s", rand); diff --git a/src/xmpp/jid.h b/src/xmpp/jid.h index a591b7430..ea738a63f 100644 --- a/src/xmpp/jid.h +++ b/src/xmpp/jid.h @@ -41,18 +41,18 @@ struct jid_t { unsigned int refcnt; - char* str; - char* localpart; - char* domainpart; - char* resourcepart; - char* barejid; - char* fulljid; + gchar* str; + gchar* localpart; + gchar* domainpart; + gchar* resourcepart; + gchar* barejid; + gchar* fulljid; }; typedef struct jid_t Jid; Jid* jid_create(const gchar* const str); -Jid* jid_create_from_bare_and_resource(const char* const barejid, const char* const resource); +Jid* jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource); void jid_destroy(Jid* jid); void jid_ref(Jid* jid); @@ -60,10 +60,10 @@ void jid_auto_destroy(Jid** str); #define auto_jid __attribute__((__cleanup__(jid_auto_destroy))) gboolean jid_is_valid_room_form(Jid* jid); -char* create_fulljid(const char* const barejid, const char* const resource); -char* get_nick_from_full_jid(const char* const full_room_jid); +gchar* create_fulljid(const gchar* const barejid, const gchar* const resource); +gchar* get_nick_from_full_jid(const gchar* const full_room_jid); -const char* jid_fulljid_or_barejid(Jid* jid); +const gchar* jid_fulljid_or_barejid(Jid* jid); gchar* jid_random_resource(void); #endif diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 1b627ef37..bc07b0737 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -353,7 +353,7 @@ message_handlers_init(void) ProfMessage* message_init(void) { - ProfMessage* message = calloc(1, sizeof(ProfMessage)); + ProfMessage* message = g_new0(ProfMessage, 1); message->enc = PROF_MSG_ENC_NONE; message->trusted = true; @@ -420,7 +420,7 @@ message_handlers_clear(void) void message_pubsub_event_handler_add(const char* const node, ProfMessageCallback func, ProfMessageFreeCallback free_func, void* userdata) { - ProfMessageHandler* handler = malloc(sizeof(ProfMessageHandler)); + ProfMessageHandler* handler = g_new(ProfMessageHandler, 1); handler->func = func; handler->free_func = free_func; handler->userdata = userdata; @@ -476,7 +476,7 @@ message_send_chat_pgp(const char* const barejid, const char* const msg, gboolean ProfAccount* account = accounts_get_account(session_get_account_name()); if (account->pgp_keyid) { auto_jid Jid* jidp = jid_create(jid); - auto_char char* encrypted = p_gpg_encrypt(jidp->barejid, msg, account->pgp_keyid); + auto_gchar gchar* encrypted = p_gpg_encrypt(jidp->barejid, msg, account->pgp_keyid); if (encrypted) { message = xmpp_message_new(ctx, STANZA_TYPE_CHAT, jid, id); xmpp_message_set_body(message, "This message is encrypted (XEP-0027)."); diff --git a/src/xmpp/muc.c b/src/xmpp/muc.c index 0418667be..050cebe1d 100644 --- a/src/xmpp/muc.c +++ b/src/xmpp/muc.c @@ -214,7 +214,7 @@ muc_confserver_clear(void) void muc_join(const char* const room, const char* const nick, const char* const password, gboolean autojoin) { - ChatRoom* new_room = malloc(sizeof(ChatRoom)); + ChatRoom* new_room = g_new0(ChatRoom, 1); new_room->room = strdup(room); new_room->nick = strdup(nick); new_room->role = MUC_ROLE_NONE; @@ -1046,7 +1046,7 @@ static Occupant* _muc_occupant_new(const char* const nick, const char* const jid, muc_role_t role, muc_affiliation_t affiliation, resource_presence_t presence, const char* const status) { - Occupant* occupant = malloc(sizeof(Occupant)); + Occupant* occupant = g_new0(Occupant, 1); if (nick) { occupant->nick = strdup(nick); diff --git a/src/xmpp/omemo.c b/src/xmpp/omemo.c index 97ab6b634..d41588a6a 100644 --- a/src/xmpp/omemo.c +++ b/src/xmpp/omemo.c @@ -244,7 +244,7 @@ omemo_start_device_session_handle_bundle(xmpp_stanza_t* const stanza, void* cons continue; } - omemo_key_t* key = malloc(sizeof(omemo_key_t)); + omemo_key_t* key = g_new0(omemo_key_t, 1); key->data = NULL; const char* prekey_id_text = xmpp_stanza_get_attribute(prekey, "preKeyId"); @@ -410,7 +410,7 @@ omemo_receive_message(xmpp_stanza_t* const stanza, gboolean* trusted) continue; } - omemo_key_t* key = malloc(sizeof(omemo_key_t)); + omemo_key_t* key = g_new0(omemo_key_t, 1); char* key_text = xmpp_stanza_get_text(key_stanza); if (!key_text) { free(key); diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index 3ad2880fb..0ea74ddec 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -268,7 +268,7 @@ _send_room_presence(xmpp_stanza_t* presence) const char* const nick = muc_nick(room); if (nick) { - auto_char char* full_room_jid = create_fulljid(room, nick); + auto_gchar gchar* full_room_jid = create_fulljid(room, nick); xmpp_stanza_set_to(presence, full_room_jid); log_debug("Sending presence to room: %s", full_room_jid); @@ -314,7 +314,7 @@ presence_change_room_nick(const char* const room, const char* const nick) const char* show = stanza_get_presence_string_from_type(presence_type); const char* status = connection_get_presence_msg(); int pri = accounts_get_priority_for_presence_type(session_get_account_name(), presence_type); - auto_char char* full_room_jid = create_fulljid(room, nick); + auto_gchar gchar* full_room_jid = create_fulljid(room, nick); xmpp_ctx_t* ctx = connection_get_ctx(); xmpp_stanza_t* presence = stanza_create_room_newnick_presence(ctx, full_room_jid); @@ -621,7 +621,7 @@ _available_handler(xmpp_stanza_t* const stanza) } return; } else { - const char* jid = jid_fulljid_or_barejid(xmpp_presence->jid); + const gchar* jid = jid_fulljid_or_barejid(xmpp_presence->jid); log_debug("Presence available handler fired for: %s", jid); } @@ -632,7 +632,7 @@ _available_handler(xmpp_stanza_t* const stanza) XMPPCaps* caps = stanza_parse_caps(stanza); if ((g_strcmp0(my_jid->fulljid, xmpp_presence->jid->fulljid) != 0) && caps) { log_debug("Presence contains capabilities."); - const char* jid = jid_fulljid_or_barejid(xmpp_presence->jid); + const gchar* jid = jid_fulljid_or_barejid(xmpp_presence->jid); _handle_caps(jid, caps); } stanza_free_caps(caps); diff --git a/src/xmpp/resource.c b/src/xmpp/resource.c index 007a97c03..50d8ca34a 100644 --- a/src/xmpp/resource.c +++ b/src/xmpp/resource.c @@ -39,18 +39,20 @@ #include #include +#include + #include "common.h" #include "xmpp/resource.h" Resource* -resource_new(const char* const name, resource_presence_t presence, const char* const status, const int priority) +resource_new(const gchar* const name, resource_presence_t presence, const gchar* const status, const int priority) { assert(name != NULL); - Resource* new_resource = malloc(sizeof(struct resource_t)); - new_resource->name = strdup(name); + Resource* new_resource = g_new(Resource, 1); + new_resource->name = g_strdup(name); new_resource->presence = presence; if (status) { - new_resource->status = strdup(status); + new_resource->status = g_strdup(status); } else { new_resource->status = NULL; } @@ -93,14 +95,14 @@ void resource_destroy(Resource* resource) { if (resource) { - free(resource->name); - free(resource->status); - free(resource); + g_free(resource->name); + g_free(resource->status); + g_free(resource); } } gboolean -valid_resource_presence_string(const char* const str) +valid_resource_presence_string(const gchar* const str) { assert(str != NULL); if ((strcmp(str, "online") == 0) || (strcmp(str, "chat") == 0) || (strcmp(str, "away") == 0) || (strcmp(str, "xa") == 0) || (strcmp(str, "dnd") == 0)) { @@ -110,7 +112,7 @@ valid_resource_presence_string(const char* const str) } } -const char* +const gchar* string_from_resource_presence(resource_presence_t presence) { switch (presence) { @@ -128,7 +130,7 @@ string_from_resource_presence(resource_presence_t presence) } resource_presence_t -resource_presence_from_string(const char* const str) +resource_presence_from_string(const gchar* const str) { if (str == NULL) { return RESOURCE_ONLINE; diff --git a/src/xmpp/resource.h b/src/xmpp/resource.h index 41d205113..3710990a3 100644 --- a/src/xmpp/resource.h +++ b/src/xmpp/resource.h @@ -40,20 +40,20 @@ typedef struct resource_t { - char* name; + gchar* name; resource_presence_t presence; - char* status; + gchar* status; int priority; } Resource; -Resource* resource_new(const char* const name, resource_presence_t presence, const char* const status, +Resource* resource_new(const gchar* const name, resource_presence_t presence, const gchar* const status, const int priority); void resource_destroy(Resource* resource); int resource_compare_availability(Resource* first, Resource* second); -gboolean valid_resource_presence_string(const char* const str); -const char* string_from_resource_presence(resource_presence_t presence); -resource_presence_t resource_presence_from_string(const char* const str); +gboolean valid_resource_presence_string(const gchar* const str); +const gchar* string_from_resource_presence(resource_presence_t presence); +resource_presence_t resource_presence_from_string(const gchar* const str); contact_presence_t contact_presence_from_resource_presence(resource_presence_t resource_presence); #endif diff --git a/src/xmpp/roster.c b/src/xmpp/roster.c index a760a8884..e4121cbea 100644 --- a/src/xmpp/roster.c +++ b/src/xmpp/roster.c @@ -122,7 +122,7 @@ roster_send_add_to_group(const char* const group, PContact contact) new_groups = g_slist_append(new_groups, strdup(group)); // add an id handler to handle the response auto_char char* unique_id = connection_create_stanza_id(); - GroupData* data = malloc(sizeof(GroupData)); + GroupData* data = g_new0(GroupData, 1); data->group = strdup(group); if (p_contact_name(contact)) { data->name = strdup(p_contact_name(contact)); @@ -164,7 +164,7 @@ roster_send_remove_from_group(const char* const group, PContact contact) // add an id handler to handle the response auto_char char* unique_id = connection_create_stanza_id(); - GroupData* data = malloc(sizeof(GroupData)); + GroupData* data = g_new0(GroupData, 1); data->group = strdup(group); if (p_contact_name(contact)) { data->name = strdup(p_contact_name(contact)); diff --git a/src/xmpp/roster_list.c b/src/xmpp/roster_list.c index 771c7af10..9d04c4f5c 100644 --- a/src/xmpp/roster_list.c +++ b/src/xmpp/roster_list.c @@ -91,7 +91,7 @@ roster_create(void) { assert(roster == NULL); - roster = malloc(sizeof(ProfRoster)); + roster = g_new0(ProfRoster, 1); roster->contacts = g_hash_table_new_full(g_str_hash, (GEqualFunc)_key_equals, g_free, (GDestroyNotify)p_contact_free); roster->name_ac = autocomplete_new(); roster->barejid_ac = autocomplete_new(); @@ -145,7 +145,7 @@ roster_update_presence(const char* const barejid, Resource* resource, GDateTime* assert(resource != NULL); if (!roster_received) { - ProfPendingPresence* presence = malloc(sizeof(ProfPendingPresence)); + ProfPendingPresence* presence = g_new0(ProfPendingPresence, 1); presence->barejid = strdup(barejid); presence->resource = resource; presence->last_activity = last_activity; diff --git a/src/xmpp/session.c b/src/xmpp/session.c index ebd49fef7..033fa5f15 100644 --- a/src/xmpp/session.c +++ b/src/xmpp/session.c @@ -565,11 +565,11 @@ session_reconnect_now(void) return; } - auto_char char* jid = NULL; + auto_gchar gchar* jid = NULL; if (account->resource) { jid = create_fulljid(account->jid, account->resource); } else { - jid = strdup(account->jid); + jid = g_strdup(account->jid); } const char* server; unsigned short port; diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index 2bca1913b..559871f9c 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -221,6 +221,12 @@ stanza_create_http_upload_request(xmpp_ctx_t* ctx, const char* const id, xmpp_stanza_set_ns(request, STANZA_NS_HTTP_UPLOAD); auto_char char* filename_cpy = strdup(upload->filename); + if (!filename_cpy) { + xmpp_stanza_release(iq); + xmpp_stanza_release(request); + return NULL; + } + // strip spaces from filename (servers don't spaces) for (size_t i = 0; i < strlen(filename_cpy); i++) { if (filename_cpy[i] == ' ') { @@ -1690,7 +1696,7 @@ stanza_parse_caps(xmpp_stanza_t* const stanza) const char* node = xmpp_stanza_get_attribute(caps_st, STANZA_ATTR_NODE); const char* ver = xmpp_stanza_get_attribute(caps_st, STANZA_ATTR_VER); - XMPPCaps* caps = (XMPPCaps*)malloc(sizeof(XMPPCaps)); + XMPPCaps* caps = g_new0(XMPPCaps, 1); caps->hash = hash ? strdup(hash) : NULL; caps->node = node ? strdup(node) : NULL; caps->ver = ver ? strdup(ver) : NULL; @@ -2134,7 +2140,7 @@ stanza_parse_presence(xmpp_stanza_t* stanza, int* err) return NULL; } - XMPPPresence* result = (XMPPPresence*)malloc(sizeof(XMPPPresence)); + XMPPPresence* result = g_new0(XMPPPresence, 1); result->jid = from_jid; result->show = stanza_get_show(stanza, "online"); diff --git a/src/xmpp/vcard.c b/src/xmpp/vcard.c index 43e9e23ac..a2b9c70c4 100644 --- a/src/xmpp/vcard.c +++ b/src/xmpp/vcard.c @@ -59,7 +59,7 @@ typedef struct // for photo int photo_index; gboolean open; - char* filename; + gchar* filename; } _userdata; static void @@ -209,7 +209,7 @@ vcard_free_full(vCard* vcard) vCard* vcard_new(void) { - vCard* vcard = calloc(1, sizeof(vCard)); + vCard* vcard = g_new0(vCard, 1); if (!vcard) { return NULL; @@ -238,10 +238,10 @@ _free_userdata(_userdata* data) vcard_free(data->vcard); if (data->filename) { - free(data->filename); + g_free(data->filename); } - free(data); + g_free(data); } // Function must be called with root element @@ -287,7 +287,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) vcard->name.suffix = child_pointer2 ? stanza_text_strdup(child_pointer2) : NULL; flags |= 2; } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "NICKNAME")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -304,7 +304,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "PHOTO")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -346,7 +346,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) } g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "BDAY")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -392,7 +392,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) } g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "ADR")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -438,7 +438,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) element->address.country = child_pointer2 ? stanza_text_strdup(child_pointer2) : NULL; g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "TEL")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -494,7 +494,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) element->telephone.number = stanza_text_strdup(child_pointer2); g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "EMAIL")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -526,7 +526,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) element->email.userid = stanza_text_strdup(child_pointer2); g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "JABBERID")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -543,7 +543,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "TITLE")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -560,7 +560,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "ROLE")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -577,7 +577,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "NOTE")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -594,7 +594,7 @@ vcard_parse(xmpp_stanza_t* vcard_xml, vCard* vcard) g_queue_push_tail(vcard->elements, element); } else if (!g_strcmp0(xmpp_stanza_get_name(child_pointer), "URL")) { - vcard_element_t* element = calloc(1, sizeof(vcard_element_t)); + vcard_element_t* element = g_new0(vcard_element_t, 1); if (!element) { // Allocation failed continue; @@ -1227,12 +1227,10 @@ vcard_print(xmpp_ctx_t* ctx, ProfWin* window, char* jid) return; } - _userdata* data = calloc(1, sizeof(_userdata)); + _userdata* data = g_new0(_userdata, 1); data->vcard = vcard_new(); - if (!data || !data->vcard) { - if (data) { - free(data); - } + if (!data->vcard) { + g_free(data); cons_show("vCard allocation failed"); return; @@ -1376,13 +1374,11 @@ _vcard_photo_result(xmpp_stanza_t* const stanza, void* userdata) void vcard_photo(xmpp_ctx_t* ctx, char* jid, char* filename, int index, gboolean open) { - _userdata* data = calloc(1, sizeof(_userdata)); + _userdata* data = g_new0(_userdata, 1); data->vcard = vcard_new(); - if (!data || !data->vcard) { - if (data) { - free(data); - } + if (!data->vcard) { + g_free(data); cons_show("vCard allocation failed"); return; @@ -1392,7 +1388,7 @@ vcard_photo(xmpp_ctx_t* ctx, char* jid, char* filename, int index, gboolean open data->open = open; if (filename) { - data->filename = strdup(filename); + data->filename = g_strdup(filename); } auto_char char* id = connection_create_stanza_id(); diff --git a/tests/unittests/log/stub_log.c b/tests/unittests/log/stub_log.c index aba5a6030..75ee991fa 100644 --- a/tests/unittests/log/stub_log.c +++ b/tests/unittests/log/stub_log.c @@ -60,10 +60,10 @@ log_msg(log_level_t level, const char* const area, const char* const msg) { } -const char* +const gchar* get_log_file_location(void) { - return mock_ptr_type(char*); + return mock_ptr_type(gchar*); } int diff --git a/tests/unittests/pgp/stub_gpg.c b/tests/unittests/pgp/stub_gpg.c index 249a2c9c0..c298b12e7 100644 --- a/tests/unittests/pgp/stub_gpg.c +++ b/tests/unittests/pgp/stub_gpg.c @@ -26,35 +26,35 @@ p_gpg_libver(void) } void -p_gpg_verify(const char* const barejid, const char* const sign) +p_gpg_verify(const gchar* const barejid, const gchar* const sign) { } -char* -p_gpg_sign(const char* const str, const char* const fp) +gchar* +p_gpg_sign(const gchar* const str, const gchar* const fp) { return NULL; } gboolean -p_gpg_valid_key(const char* const keyid, char** err_str) +p_gpg_valid_key(const gchar* const keyid, gchar** err_str) { return FALSE; } gboolean -p_gpg_available(const char* const barejid) +p_gpg_available(const gchar* const barejid) { return FALSE; } -char* -p_gpg_decrypt(const char* const cipher) +gchar* +p_gpg_decrypt(const gchar* const cipher) { return NULL; } void -p_gpg_on_connect(const char* const barejid) +p_gpg_on_connect(const gchar* const barejid) { } void @@ -63,13 +63,13 @@ p_gpg_on_disconnect(void) } gboolean -p_gpg_addkey(const char* const jid, const char* const keyid) +p_gpg_addkey(const gchar* const jid, const gchar* const keyid) { return TRUE; } void -p_gpg_free_decrypted(char* decrypted) +p_gpg_free_decrypted(gchar* decrypted) { } @@ -83,32 +83,32 @@ p_gpg_autocomplete_key_reset(void) { } -char* -p_gpg_autocomplete_key(const char* const search_str, gboolean previous, void* context) +gchar* +p_gpg_autocomplete_key(const gchar* const search_str, gboolean previous, void* context) { return NULL; } -char* -p_gpg_format_fp_str(char* fp) +gchar* +p_gpg_format_fp_str(gchar* fp) { return NULL; } -char* -p_gpg_get_pubkey(const char* const keyid) +gchar* +p_gpg_get_pubkey(const gchar* const keyid) { return NULL; } gboolean -p_gpg_is_public_key_format(const char* buffer) +p_gpg_is_public_key_format(const gchar* buffer) { return TRUE; } ProfPGPKey* -p_gpg_import_pubkey(const char* buffer) +p_gpg_import_pubkey(const gchar* buffer) { return NULL; } diff --git a/tests/unittests/test_callbacks.c b/tests/unittests/test_callbacks.c index 9796f4896..005ce82ad 100644 --- a/tests/unittests/test_callbacks.c +++ b/tests/unittests/test_callbacks.c @@ -19,16 +19,16 @@ void returns_commands(void** state) { plugins_init(); - PluginCommand* command1 = calloc(1, sizeof(PluginCommand)); - command1->command_name = strdup("command1"); + PluginCommand* command1 = g_new0(PluginCommand, 1); + command1->command_name = g_strdup("command1"); callbacks_add_command("plugin1", command1); - PluginCommand* command2 = calloc(1, sizeof(PluginCommand)); - command2->command_name = strdup("command2"); + PluginCommand* command2 = g_new0(PluginCommand, 1); + command2->command_name = g_strdup("command2"); callbacks_add_command("plugin1", command2); - PluginCommand* command3 = calloc(1, sizeof(PluginCommand)); - command3->command_name = strdup("command3"); + PluginCommand* command3 = g_new0(PluginCommand, 1); + command3->command_name = g_strdup("command3"); callbacks_add_command("plugin2", command3); GList* names = plugins_get_command_names(); diff --git a/tests/unittests/test_cmd_account.c b/tests/unittests/test_cmd_account.c index 467838201..dd6074086 100644 --- a/tests/unittests/test_cmd_account.c +++ b/tests/unittests/test_cmd_account.c @@ -50,10 +50,10 @@ cmd_account_list_shows_accounts(void** state) { gchar* args[] = { "list", NULL }; - gchar** accounts = malloc(sizeof(gchar*) * 4); - accounts[0] = strdup("account1"); - accounts[1] = strdup("account2"); - accounts[2] = strdup("account3"); + gchar** accounts = g_new0(gchar*, 4); + accounts[0] = g_strdup("account1"); + accounts[1] = g_strdup("account2"); + accounts[2] = g_strdup("account3"); accounts[3] = NULL; will_return(accounts_get_list, accounts); diff --git a/tests/unittests/test_cmd_alias.c b/tests/unittests/test_cmd_alias.c index c86733a2b..690810125 100644 --- a/tests/unittests/test_cmd_alias.c +++ b/tests/unittests/test_cmd_alias.c @@ -73,7 +73,7 @@ cmd_alias_add_adds_alias(void** state) gchar* returned_val = prefs_get_alias("hc"); assert_string_equal("/help commands", returned_val); - free(returned_val); + g_free(returned_val); } void @@ -105,7 +105,7 @@ cmd_alias_remove_removes_alias(void** state) gchar* returned_val = prefs_get_alias("hn"); assert_null(returned_val); - free(returned_val); + g_free(returned_val); } void diff --git a/tests/unittests/test_cmd_bookmark.c b/tests/unittests/test_cmd_bookmark.c index 168ce8ce4..849561bad 100644 --- a/tests/unittests/test_cmd_bookmark.c +++ b/tests/unittests/test_cmd_bookmark.c @@ -97,23 +97,23 @@ cmd_bookmark_list_shows_bookmarks(void** state) ProfWin window; window.type = WIN_CONSOLE; - Bookmark* bm1 = malloc(sizeof(Bookmark)); + Bookmark* bm1 = g_new0(Bookmark, 1); bm1->barejid = strdup("room1@conf.org"); bm1->nick = strdup("bob"); bm1->autojoin = FALSE; - Bookmark* bm2 = malloc(sizeof(Bookmark)); + Bookmark* bm2 = g_new0(Bookmark, 1); bm2->barejid = strdup("room2@conf.org"); bm2->nick = strdup("steve"); bm2->autojoin = TRUE; - Bookmark* bm3 = malloc(sizeof(Bookmark)); + Bookmark* bm3 = g_new0(Bookmark, 1); bm3->barejid = strdup("room3@conf.org"); bm3->nick = strdup("dave"); bm3->autojoin = TRUE; - Bookmark* bm4 = malloc(sizeof(Bookmark)); + Bookmark* bm4 = g_new0(Bookmark, 1); bm4->barejid = strdup("room4@conf.org"); bm4->nick = strdup("james"); bm4->autojoin = FALSE; - Bookmark* bm5 = malloc(sizeof(Bookmark)); + Bookmark* bm5 = g_new0(Bookmark, 1); bm5->barejid = strdup("room5@conf.org"); bm5->nick = strdup("mike"); bm5->autojoin = FALSE; diff --git a/tests/unittests/test_cmd_connect.c b/tests/unittests/test_cmd_connect.c index 7f6d54ea3..be37ef072 100644 --- a/tests/unittests/test_cmd_connect.c +++ b/tests/unittests/test_cmd_connect.c @@ -52,7 +52,7 @@ cmd_connect_when_no_account(void** state) expect_string(accounts_get_account, name, "user@server.org"); will_return(accounts_get_account, NULL); - will_return(ui_ask_password, strdup("password")); + will_return(ui_ask_password, g_strdup("password")); expect_cons_show("Connecting as user@server.org"); @@ -76,7 +76,7 @@ cmd_connect_fail_message(void** state) expect_any(accounts_get_account, name); will_return(accounts_get_account, NULL); - will_return(ui_ask_password, strdup("password")); + will_return(ui_ask_password, g_strdup("password")); expect_cons_show("Connecting as user@server.org"); @@ -102,7 +102,7 @@ cmd_connect_lowercases_argument_with_no_account(void** state) expect_string(accounts_get_account, name, "USER@server.ORG"); will_return(accounts_get_account, NULL); - will_return(ui_ask_password, strdup("password")); + will_return(ui_ask_password, g_strdup("password")); expect_cons_show("Connecting as user@server.org"); @@ -130,7 +130,7 @@ cmd_connect_lowercases_argument_with_account(void** state) expect_cons_show("Connecting with account Jabber_org as me@jabber.org"); - expect_memory(session_connect_with_account, account, account, sizeof(account)); + expect_memory(session_connect_with_account, account, account, sizeof(ProfAccount)); will_return(session_connect_with_account, JABBER_CONNECTING); gboolean result = cmd_connect(NULL, CMD_CONNECT, args); @@ -149,7 +149,7 @@ cmd_connect_asks_password_when_not_in_account(void** state) expect_any(accounts_get_account, name); will_return(accounts_get_account, account); - will_return(ui_ask_password, strdup("password")); + will_return(ui_ask_password, g_strdup("password")); expect_cons_show("Connecting with account jabber_org as me@jabber.org"); @@ -338,7 +338,7 @@ cmd_connect_with_server_when_provided(void** state) expect_string(accounts_get_account, name, "user@server.org"); will_return(accounts_get_account, NULL); - will_return(ui_ask_password, strdup("password")); + will_return(ui_ask_password, g_strdup("password")); expect_cons_show("Connecting as user@server.org"); @@ -362,7 +362,7 @@ cmd_connect_with_port_when_provided(void** state) expect_string(accounts_get_account, name, "user@server.org"); will_return(accounts_get_account, NULL); - will_return(ui_ask_password, strdup("password")); + will_return(ui_ask_password, g_strdup("password")); expect_cons_show("Connecting as user@server.org"); @@ -386,7 +386,7 @@ cmd_connect_with_server_and_port_when_provided(void** state) expect_string(accounts_get_account, name, "user@server.org"); will_return(accounts_get_account, NULL); - will_return(ui_ask_password, strdup("password")); + will_return(ui_ask_password, g_strdup("password")); expect_cons_show("Connecting as user@server.org"); @@ -435,7 +435,7 @@ cmd_connect_connects_with_account(void** state) expect_cons_show("Connecting with account jabber_org as me@jabber.org"); - expect_memory(session_connect_with_account, account, account, sizeof(account)); + expect_memory(session_connect_with_account, account, account, sizeof(ProfAccount)); will_return(session_connect_with_account, JABBER_CONNECTING); gboolean result = cmd_connect(NULL, CMD_CONNECT, args); diff --git a/tests/unittests/test_cmd_otr.c b/tests/unittests/test_cmd_otr.c index 7c1850dfa..832f5e2f0 100644 --- a/tests/unittests/test_cmd_otr.c +++ b/tests/unittests/test_cmd_otr.c @@ -247,7 +247,7 @@ cmd_otr_myfp_shows_my_fingerprint(void** state) will_return(connection_get_status, JABBER_CONNECTED); will_return(otr_key_loaded, TRUE); - will_return(otr_get_my_fingerprint, strdup(fingerprint)); + will_return(otr_get_my_fingerprint, g_strdup(fingerprint)); expect_win_println(message->str); @@ -344,7 +344,7 @@ cmd_otr_theirfp_shows_fingerprint(void** state) will_return(connection_get_status, JABBER_CONNECTED); expect_string(otr_get_their_fingerprint, recipient, recipient); - will_return(otr_get_their_fingerprint, strdup(fingerprint)); + will_return(otr_get_their_fingerprint, g_strdup(fingerprint)); expect_win_println(message->str); diff --git a/tests/unittests/test_cmd_roster.c b/tests/unittests/test_cmd_roster.c index aadfedc49..74ba7a984 100644 --- a/tests/unittests/test_cmd_roster.c +++ b/tests/unittests/test_cmd_roster.c @@ -193,7 +193,7 @@ cmd_roster_nick_sends_name_change_request(void** state) roster_create(); GSList* groups = NULL; - groups = g_slist_append(groups, strdup("group1")); + groups = g_slist_append(groups, g_strdup("group1")); roster_add(jid, "bob", groups, "both", FALSE); will_return(connection_get_status, JABBER_CONNECTED); @@ -251,7 +251,7 @@ cmd_roster_clearnick_sends_name_change_request_with_empty_nick(void** state) roster_create(); GSList* groups = NULL; - groups = g_slist_append(groups, strdup("group1")); + groups = g_slist_append(groups, g_strdup("group1")); roster_add(jid, "bob", groups, "both", FALSE); will_return(connection_get_status, JABBER_CONNECTED); diff --git a/tests/unittests/test_common.c b/tests/unittests/test_common.c index 8926e57f4..aed343c21 100644 --- a/tests/unittests/test_common.c +++ b/tests/unittests/test_common.c @@ -720,8 +720,8 @@ unique_filename_from_url_td(void** state) assert_string_equal(got_filename, exp_filename); - free(got_filename); - free(exp_filename); + g_free(got_filename); + g_free(exp_filename); } } @@ -735,7 +735,7 @@ _lists_equal(GSList* a, GSList* b) GSList* curra = a; GSList* currb = b; - while (curra) { + while (curra && currb) { int aval = GPOINTER_TO_INT(curra->data); int bval = GPOINTER_TO_INT(currb->data); diff --git a/tests/unittests/test_contact.c b/tests/unittests/test_contact.c index 3f6caa121..118ea4629 100644 --- a/tests/unittests/test_contact.c +++ b/tests/unittests/test_contact.c @@ -9,7 +9,7 @@ void contact_in_group(void** state) { GSList* groups = NULL; - groups = g_slist_append(groups, strdup("somegroup")); + groups = g_slist_append(groups, g_strdup("somegroup")); PContact contact = p_contact_new("bob@server.com", "bob", groups, "both", "is offline", FALSE); @@ -25,7 +25,7 @@ void contact_not_in_group(void** state) { GSList* groups = NULL; - groups = g_slist_append(groups, strdup("somegroup")); + groups = g_slist_append(groups, g_strdup("somegroup")); PContact contact = p_contact_new("bob@server.com", "bob", groups, "both", "is offline", FALSE); @@ -74,7 +74,7 @@ contact_string_when_name_exists(void** state) assert_string_equal("bob (laptop)", str); p_contact_free(contact); - free(str); + g_free(str); } void @@ -88,7 +88,7 @@ contact_string_when_name_not_exists(void** state) assert_string_equal("bob@server.com (laptop)", str); p_contact_free(contact); - free(str); + g_free(str); } void @@ -102,7 +102,7 @@ contact_string_when_default_resource(void** state) assert_string_equal("bob", str); p_contact_free(contact); - free(str); + g_free(str); } void diff --git a/tests/unittests/test_form.c b/tests/unittests/test_form.c index 583babf34..2f6b70eb7 100644 --- a/tests/unittests/test_form.c +++ b/tests/unittests/test_form.c @@ -13,13 +13,13 @@ connection_get_ctx(void) static DataForm* _new_form(void) { - DataForm* form = malloc(sizeof(DataForm)); + DataForm* form = g_new0(DataForm, 1); form->type = NULL; form->title = NULL; form->instructions = NULL; form->fields = NULL; - form->var_to_tag = g_hash_table_new_full(g_str_hash, g_str_equal, free, free); - form->tag_to_var = g_hash_table_new_full(g_str_hash, g_str_equal, free, free); + form->var_to_tag = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + form->tag_to_var = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); form->tag_ac = NULL; return form; @@ -28,7 +28,7 @@ _new_form(void) static FormField* _new_field(void) { - FormField* field = malloc(sizeof(FormField)); + FormField* field = g_new0(FormField, 1); field->label = NULL; field->type = NULL; field->description = NULL; @@ -58,8 +58,8 @@ get_form_type_field_returns_null_when_not_present(void** state) { DataForm* form = _new_form(); FormField* field = _new_field(); - field->var = strdup("var1"); - field->values = g_slist_append(field->values, strdup("value1")); + field->var = g_strdup("var1"); + field->values = g_slist_append(field->values, g_strdup("value1")); form->fields = g_slist_append(form->fields, field); char* result = form_get_form_type_field(form); @@ -75,18 +75,18 @@ get_form_type_field_returns_value_when_present(void** state) DataForm* form = _new_form(); FormField* field1 = _new_field(); - field1->var = strdup("var1"); - field1->values = g_slist_append(field1->values, strdup("value1")); + field1->var = g_strdup("var1"); + field1->values = g_slist_append(field1->values, g_strdup("value1")); form->fields = g_slist_append(form->fields, field1); FormField* field2 = _new_field(); - field2->var = strdup("FORM_TYPE"); - field2->values = g_slist_append(field2->values, strdup("value2")); + field2->var = g_strdup("FORM_TYPE"); + field2->values = g_slist_append(field2->values, g_strdup("value2")); form->fields = g_slist_append(form->fields, field2); FormField* field3 = _new_field(); - field3->var = strdup("var3"); - field3->values = g_slist_append(field3->values, strdup("value3")); + field3->var = g_strdup("var3"); + field3->values = g_slist_append(field3->values, g_strdup("value3")); form->fields = g_slist_append(form->fields, field3); char* result = form_get_form_type_field(form); @@ -112,19 +112,19 @@ void get_field_type_returns_correct_type(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); - g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag2"), g_strdup("var2")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_TEXT_SINGLE; - field1->values = g_slist_append(field1->values, strdup("value1")); + field1->values = g_slist_append(field1->values, g_strdup("value1")); form->fields = g_slist_append(form->fields, field1); FormField* field2 = _new_field(); - field2->var = strdup("var2"); + field2->var = g_strdup("var2"); field2->type_t = FIELD_TEXT_MULTI; - field2->values = g_slist_append(field2->values, strdup("value2")); + field2->values = g_slist_append(field2->values, g_strdup("value2")); form->fields = g_slist_append(form->fields, field2); form_field_type_t result = form_get_field_type(form, "tag2"); @@ -138,17 +138,17 @@ void set_value_adds_when_none(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); - g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag2"), g_strdup("var2")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_TEXT_SINGLE; - field1->values = g_slist_append(field1->values, strdup("value1")); + field1->values = g_slist_append(field1->values, g_strdup("value1")); form->fields = g_slist_append(form->fields, field1); FormField* field2 = _new_field(); - field2->var = strdup("var2"); + field2->var = g_strdup("var2"); field2->type_t = FIELD_LIST_SINGLE; form->fields = g_slist_append(form->fields, field2); @@ -177,18 +177,18 @@ void set_value_updates_when_one(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); - g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag2"), g_strdup("var2")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_TEXT_SINGLE; form->fields = g_slist_append(form->fields, field1); FormField* field2 = _new_field(); - field2->var = strdup("var2"); + field2->var = g_strdup("var2"); field2->type_t = FIELD_LIST_SINGLE; - field2->values = g_slist_append(field2->values, strdup("value2")); + field2->values = g_slist_append(field2->values, g_strdup("value2")); form->fields = g_slist_append(form->fields, field2); form_set_value(form, "tag2", "a new value"); @@ -216,18 +216,18 @@ void add_unique_value_adds_when_none(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); - g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag2"), g_strdup("var2")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_JID_MULTI; form->fields = g_slist_append(form->fields, field1); FormField* field2 = _new_field(); - field2->var = strdup("var2"); + field2->var = g_strdup("var2"); field2->type_t = FIELD_LIST_SINGLE; - field2->values = g_slist_append(field2->values, strdup("value2")); + field2->values = g_slist_append(field2->values, g_strdup("value2")); form->fields = g_slist_append(form->fields, field2); gboolean ret = form_add_unique_value(form, "tag1", "me@server.com"); @@ -256,19 +256,19 @@ void add_unique_value_does_nothing_when_exists(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); - g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag2"), g_strdup("var2")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_JID_MULTI; - field1->values = g_slist_append(field1->values, strdup("me@server.com")); + field1->values = g_slist_append(field1->values, g_strdup("me@server.com")); form->fields = g_slist_append(form->fields, field1); FormField* field2 = _new_field(); - field2->var = strdup("var2"); + field2->var = g_strdup("var2"); field2->type_t = FIELD_LIST_SINGLE; - field2->values = g_slist_append(field2->values, strdup("value2")); + field2->values = g_slist_append(field2->values, g_strdup("value2")); form->fields = g_slist_append(form->fields, field2); gboolean ret = form_add_unique_value(form, "tag1", "me@server.com"); @@ -297,21 +297,21 @@ void add_unique_value_adds_when_doesnt_exist(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); - g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag2"), g_strdup("var2")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_JID_MULTI; - field1->values = g_slist_append(field1->values, strdup("dolan@server.com")); - field1->values = g_slist_append(field1->values, strdup("kieran@server.com")); - field1->values = g_slist_append(field1->values, strdup("chi@server.com")); + field1->values = g_slist_append(field1->values, g_strdup("dolan@server.com")); + field1->values = g_slist_append(field1->values, g_strdup("kieran@server.com")); + field1->values = g_slist_append(field1->values, g_strdup("chi@server.com")); form->fields = g_slist_append(form->fields, field1); FormField* field2 = _new_field(); - field2->var = strdup("var2"); + field2->var = g_strdup("var2"); field2->type_t = FIELD_LIST_SINGLE; - field2->values = g_slist_append(field2->values, strdup("value2")); + field2->values = g_slist_append(field2->values, g_strdup("value2")); form->fields = g_slist_append(form->fields, field2); gboolean ret = form_add_unique_value(form, "tag1", "me@server.com"); @@ -346,10 +346,10 @@ void add_value_adds_when_none(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; form->fields = g_slist_append(form->fields, field1); @@ -378,14 +378,14 @@ void add_value_adds_when_some(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("some text")); - field1->values = g_slist_append(field1->values, strdup("some more text")); - field1->values = g_slist_append(field1->values, strdup("yet some more text")); + field1->values = g_slist_append(field1->values, g_strdup("some text")); + field1->values = g_slist_append(field1->values, g_strdup("some more text")); + field1->values = g_slist_append(field1->values, g_strdup("yet some more text")); form->fields = g_slist_append(form->fields, field1); form_add_value(form, "tag1", "new value"); @@ -419,15 +419,15 @@ void add_value_adds_when_exists(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("some text")); - field1->values = g_slist_append(field1->values, strdup("some more text")); - field1->values = g_slist_append(field1->values, strdup("yet some more text")); - field1->values = g_slist_append(field1->values, strdup("new value")); + field1->values = g_slist_append(field1->values, g_strdup("some text")); + field1->values = g_slist_append(field1->values, g_strdup("some more text")); + field1->values = g_slist_append(field1->values, g_strdup("yet some more text")); + field1->values = g_slist_append(field1->values, g_strdup("new value")); form->fields = g_slist_append(form->fields, field1); form_add_value(form, "tag1", "new value"); @@ -461,10 +461,10 @@ void remove_value_does_nothing_when_none(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; form->fields = g_slist_append(form->fields, field1); @@ -490,15 +490,15 @@ void remove_value_does_nothing_when_doesnt_exist(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("value1")); - field1->values = g_slist_append(field1->values, strdup("value2")); - field1->values = g_slist_append(field1->values, strdup("value3")); - field1->values = g_slist_append(field1->values, strdup("value4")); + field1->values = g_slist_append(field1->values, g_strdup("value1")); + field1->values = g_slist_append(field1->values, g_strdup("value2")); + field1->values = g_slist_append(field1->values, g_strdup("value3")); + field1->values = g_slist_append(field1->values, g_strdup("value4")); form->fields = g_slist_append(form->fields, field1); gboolean res = form_remove_value(form, "tag1", "value5"); @@ -532,12 +532,12 @@ void remove_value_removes_when_one(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("value4")); + field1->values = g_slist_append(field1->values, g_strdup("value4")); form->fields = g_slist_append(form->fields, field1); gboolean res = form_remove_value(form, "tag1", "value4"); @@ -562,15 +562,15 @@ void remove_value_removes_when_many(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("value1")); - field1->values = g_slist_append(field1->values, strdup("value2")); - field1->values = g_slist_append(field1->values, strdup("value3")); - field1->values = g_slist_append(field1->values, strdup("value4")); + field1->values = g_slist_append(field1->values, g_strdup("value1")); + field1->values = g_slist_append(field1->values, g_strdup("value2")); + field1->values = g_slist_append(field1->values, g_strdup("value3")); + field1->values = g_slist_append(field1->values, g_strdup("value4")); form->fields = g_slist_append(form->fields, field1); gboolean res = form_remove_value(form, "tag1", "value2"); @@ -604,10 +604,10 @@ void remove_text_multi_value_does_nothing_when_none(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; form->fields = g_slist_append(form->fields, field1); @@ -633,15 +633,15 @@ void remove_text_multi_value_does_nothing_when_doesnt_exist(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("value1")); - field1->values = g_slist_append(field1->values, strdup("value2")); - field1->values = g_slist_append(field1->values, strdup("value3")); - field1->values = g_slist_append(field1->values, strdup("value4")); + field1->values = g_slist_append(field1->values, g_strdup("value1")); + field1->values = g_slist_append(field1->values, g_strdup("value2")); + field1->values = g_slist_append(field1->values, g_strdup("value3")); + field1->values = g_slist_append(field1->values, g_strdup("value4")); form->fields = g_slist_append(form->fields, field1); gboolean res = form_remove_text_multi_value(form, "tag1", 5); @@ -675,12 +675,12 @@ void remove_text_multi_value_removes_when_one(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("value4")); + field1->values = g_slist_append(field1->values, g_strdup("value4")); form->fields = g_slist_append(form->fields, field1); gboolean res = form_remove_text_multi_value(form, "tag1", 1); @@ -705,15 +705,15 @@ void remove_text_multi_value_removes_when_many(void** state) { DataForm* form = _new_form(); - g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, g_strdup("tag1"), g_strdup("var1")); FormField* field1 = _new_field(); - field1->var = strdup("var1"); + field1->var = g_strdup("var1"); field1->type_t = FIELD_LIST_MULTI; - field1->values = g_slist_append(field1->values, strdup("value1")); - field1->values = g_slist_append(field1->values, strdup("value2")); - field1->values = g_slist_append(field1->values, strdup("value3")); - field1->values = g_slist_append(field1->values, strdup("value4")); + field1->values = g_slist_append(field1->values, g_strdup("value1")); + field1->values = g_slist_append(field1->values, g_strdup("value2")); + field1->values = g_slist_append(field1->values, g_strdup("value3")); + field1->values = g_slist_append(field1->values, g_strdup("value4")); form->fields = g_slist_append(form->fields, field1); gboolean res = form_remove_text_multi_value(form, "tag1", 2); diff --git a/tests/unittests/test_jid.c b/tests/unittests/test_jid.c index 7bc2137e2..6c472d0f7 100644 --- a/tests/unittests/test_jid.c +++ b/tests/unittests/test_jid.c @@ -216,7 +216,7 @@ returns_fulljid_when_exists(void** state) { Jid* jid = jid_create("localpart@domainpart/resourcepart"); - const char* result = jid_fulljid_or_barejid(jid); + const gchar* result = jid_fulljid_or_barejid(jid); assert_string_equal("localpart@domainpart/resourcepart", result); @@ -228,7 +228,7 @@ returns_barejid_when_fulljid_not_exists(void** state) { Jid* jid = jid_create("localpart@domainpart"); - const char* result = jid_fulljid_or_barejid(jid); + const gchar* result = jid_fulljid_or_barejid(jid); assert_string_equal("localpart@domainpart", result); diff --git a/tests/unittests/test_parser.c b/tests/unittests/test_parser.c index 2783e8d02..b72527f4a 100644 --- a/tests/unittests/test_parser.c +++ b/tests/unittests/test_parser.c @@ -460,7 +460,7 @@ get_first_of_one(void** state) char* result = get_start(inp, 2); assert_string_equal("one", result); - free(result); + g_free(result); } void @@ -470,7 +470,7 @@ get_first_of_two(void** state) char* result = get_start(inp, 2); assert_string_equal("one ", result); - free(result); + g_free(result); } void @@ -480,7 +480,7 @@ get_first_two_of_three(void** state) char* result = get_start(inp, 3); assert_string_equal("one two ", result); - free(result); + g_free(result); } void @@ -490,7 +490,7 @@ get_first_two_of_three_first_quoted(void** state) char* result = get_start(inp, 3); assert_string_equal("\"one\" two ", result); - free(result); + g_free(result); } void @@ -500,7 +500,7 @@ get_first_two_of_three_second_quoted(void** state) char* result = get_start(inp, 3); assert_string_equal("one \"two\" ", result); - free(result); + g_free(result); } void @@ -510,7 +510,7 @@ get_first_two_of_three_first_and_second_quoted(void** state) char* result = get_start(inp, 3); assert_string_equal("\"one\" \"two\" ", result); - free(result); + g_free(result); } void diff --git a/tests/unittests/test_roster_list.c b/tests/unittests/test_roster_list.c index 7fbaf394b..cc28063be 100644 --- a/tests/unittests/test_roster_list.c +++ b/tests/unittests/test_roster_list.c @@ -184,12 +184,12 @@ find_first_exists(void** state) roster_add("Dave", NULL, NULL, NULL, FALSE); roster_add("Bob", NULL, NULL, NULL, FALSE); - char* search = strdup("B"); + char* search = g_strdup("B"); char* result = roster_contact_autocomplete(search, FALSE, NULL); assert_string_equal("Bob", result); - free(result); - free(search); + g_free(result); + g_free(search); roster_destroy(); } @@ -203,7 +203,7 @@ find_second_exists(void** state) char* result = roster_contact_autocomplete("Dav", FALSE, NULL); assert_string_equal("Dave", result); - free(result); + g_free(result); roster_destroy(); } @@ -217,7 +217,7 @@ find_third_exists(void** state) char* result = roster_contact_autocomplete("Ja", FALSE, NULL); assert_string_equal("James", result); - free(result); + g_free(result); roster_destroy(); } @@ -254,8 +254,8 @@ find_twice_returns_second_when_two_match(void** state) char* result1 = roster_contact_autocomplete("Jam", FALSE, NULL); char* result2 = roster_contact_autocomplete(result1, FALSE, NULL); assert_string_equal("Jamie", result2); - free(result1); - free(result2); + g_free(result1); + g_free(result2); roster_destroy(); } @@ -280,11 +280,11 @@ find_five_times_finds_fifth(void** state) char* result4 = roster_contact_autocomplete(result3, FALSE, NULL); char* result5 = roster_contact_autocomplete(result4, FALSE, NULL); assert_string_equal("Jamo", result5); - free(result1); - free(result2); - free(result3); - free(result4); - free(result5); + g_free(result1); + g_free(result2); + g_free(result3); + g_free(result4); + g_free(result5); roster_destroy(); } @@ -300,8 +300,8 @@ find_twice_returns_first_when_two_match_and_reset(void** state) roster_reset_search_attempts(); char* result2 = roster_contact_autocomplete(result1, FALSE, NULL); assert_string_equal("James", result2); - free(result1); - free(result2); + g_free(result1); + g_free(result2); roster_destroy(); } @@ -314,7 +314,7 @@ add_contact_with_no_group(void** state) GList* groups_res = roster_get_groups(); assert_int_equal(g_list_length(groups_res), 0); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -324,7 +324,7 @@ add_contact_with_group(void** state) roster_create(); GSList* groups = NULL; - groups = g_slist_append(groups, strdup("friends")); + groups = g_slist_append(groups, g_strdup("friends")); roster_add("person@server.org", NULL, groups, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -334,7 +334,7 @@ add_contact_with_group(void** state) assert_true(found != NULL); assert_string_equal(found->data, "friends"); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -344,8 +344,8 @@ add_contact_with_two_groups(void** state) roster_create(); GSList* groups = NULL; - groups = g_slist_append(groups, strdup("friends")); - groups = g_slist_append(groups, strdup("work")); + groups = g_slist_append(groups, g_strdup("friends")); + groups = g_slist_append(groups, g_strdup("work")); roster_add("person@server.org", NULL, groups, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -358,7 +358,7 @@ add_contact_with_two_groups(void** state) assert_true(found != NULL); assert_string_equal(found->data, "work"); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -368,9 +368,9 @@ add_contact_with_three_groups(void** state) roster_create(); GSList* groups = NULL; - groups = g_slist_append(groups, strdup("friends")); - groups = g_slist_append(groups, strdup("work")); - groups = g_slist_append(groups, strdup("stuff")); + groups = g_slist_append(groups, g_strdup("friends")); + groups = g_slist_append(groups, g_strdup("work")); + groups = g_slist_append(groups, g_strdup("stuff")); roster_add("person@server.org", NULL, groups, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -386,7 +386,7 @@ add_contact_with_three_groups(void** state) assert_true(found != NULL); assert_string_equal(found->data, "stuff"); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -396,17 +396,17 @@ add_contact_with_three_groups_update_adding_two(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("friends")); - groups2 = g_slist_append(groups2, strdup("work")); - groups2 = g_slist_append(groups2, strdup("stuff")); - groups2 = g_slist_append(groups2, strdup("things")); - groups2 = g_slist_append(groups2, strdup("people")); + groups2 = g_slist_append(groups2, g_strdup("friends")); + groups2 = g_slist_append(groups2, g_strdup("work")); + groups2 = g_slist_append(groups2, g_strdup("stuff")); + groups2 = g_slist_append(groups2, g_strdup("things")); + groups2 = g_slist_append(groups2, g_strdup("people")); roster_update("person@server.org", NULL, groups2, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -428,7 +428,7 @@ add_contact_with_three_groups_update_adding_two(void** state) assert_true(found != NULL); assert_string_equal(found->data, "people"); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -438,14 +438,14 @@ add_contact_with_three_groups_update_removing_one(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("friends")); - groups2 = g_slist_append(groups2, strdup("stuff")); + groups2 = g_slist_append(groups2, g_strdup("friends")); + groups2 = g_slist_append(groups2, g_strdup("stuff")); roster_update("person@server.org", NULL, groups2, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -458,7 +458,7 @@ add_contact_with_three_groups_update_removing_one(void** state) assert_true(found != NULL); assert_string_equal(found->data, "stuff"); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -468,13 +468,13 @@ add_contact_with_three_groups_update_removing_two(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("stuff")); + groups2 = g_slist_append(groups2, g_strdup("stuff")); roster_update("person@server.org", NULL, groups2, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -484,7 +484,7 @@ add_contact_with_three_groups_update_removing_two(void** state) assert_true(found != NULL); assert_string_equal(found->data, "stuff"); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -494,9 +494,9 @@ add_contact_with_three_groups_update_removing_three(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); roster_update("person@server.org", NULL, NULL, NULL, FALSE); @@ -504,7 +504,7 @@ add_contact_with_three_groups_update_removing_three(void** state) GList* groups_res = roster_get_groups(); assert_int_equal(g_list_length(groups_res), 0); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -514,14 +514,14 @@ add_contact_with_three_groups_update_two_new(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("newfriends")); - groups2 = g_slist_append(groups2, strdup("somepeople")); + groups2 = g_slist_append(groups2, g_strdup("newfriends")); + groups2 = g_slist_append(groups2, g_strdup("somepeople")); roster_update("person@server.org", NULL, groups2, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -532,7 +532,7 @@ add_contact_with_three_groups_update_two_new(void** state) found = g_list_find_custom(groups_res, "somepeople", (GCompareFunc)g_strcmp0); assert_true(found != NULL); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -542,9 +542,9 @@ add_remove_contact_groups(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); roster_remove("person@server.org", "person@server.org"); @@ -552,7 +552,7 @@ add_remove_contact_groups(void** state) GList* groups_res = roster_get_groups(); assert_int_equal(g_list_length(groups_res), 0); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -562,14 +562,14 @@ add_contacts_with_different_groups(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("newfriends")); - groups2 = g_slist_append(groups2, strdup("somepeople")); + groups2 = g_slist_append(groups2, g_strdup("newfriends")); + groups2 = g_slist_append(groups2, g_strdup("somepeople")); roster_add("bob@server.org", NULL, groups2, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -586,7 +586,7 @@ add_contacts_with_different_groups(void** state) found = g_list_find_custom(groups_res, "somepeople", (GCompareFunc)g_strcmp0); assert_true(found != NULL); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -596,15 +596,15 @@ add_contacts_with_same_groups(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("friends")); - groups2 = g_slist_append(groups2, strdup("work")); - groups2 = g_slist_append(groups2, strdup("stuff")); + groups2 = g_slist_append(groups2, g_strdup("friends")); + groups2 = g_slist_append(groups2, g_strdup("work")); + groups2 = g_slist_append(groups2, g_strdup("stuff")); roster_add("bob@server.org", NULL, groups2, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -617,7 +617,7 @@ add_contacts_with_same_groups(void** state) found = g_list_find_custom(groups_res, "stuff", (GCompareFunc)g_strcmp0); assert_true(found != NULL); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -627,15 +627,15 @@ add_contacts_with_overlapping_groups(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("friends")); - groups2 = g_slist_append(groups2, strdup("work")); - groups2 = g_slist_append(groups2, strdup("different")); + groups2 = g_slist_append(groups2, g_strdup("friends")); + groups2 = g_slist_append(groups2, g_strdup("work")); + groups2 = g_slist_append(groups2, g_strdup("different")); roster_add("bob@server.org", NULL, groups2, NULL, FALSE); GList* groups_res = roster_get_groups(); @@ -650,7 +650,7 @@ add_contacts_with_overlapping_groups(void** state) found = g_list_find_custom(groups_res, "different", (GCompareFunc)g_strcmp0); assert_true(found != NULL); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } @@ -660,15 +660,15 @@ remove_contact_with_remaining_in_group(void** state) roster_create(); GSList* groups1 = NULL; - groups1 = g_slist_append(groups1, strdup("friends")); - groups1 = g_slist_append(groups1, strdup("work")); - groups1 = g_slist_append(groups1, strdup("stuff")); + groups1 = g_slist_append(groups1, g_strdup("friends")); + groups1 = g_slist_append(groups1, g_strdup("work")); + groups1 = g_slist_append(groups1, g_strdup("stuff")); roster_add("person@server.org", NULL, groups1, NULL, FALSE); GSList* groups2 = NULL; - groups2 = g_slist_append(groups2, strdup("friends")); - groups2 = g_slist_append(groups2, strdup("work")); - groups2 = g_slist_append(groups2, strdup("different")); + groups2 = g_slist_append(groups2, g_strdup("friends")); + groups2 = g_slist_append(groups2, g_strdup("work")); + groups2 = g_slist_append(groups2, g_strdup("different")); roster_add("bob@server.org", NULL, groups2, NULL, FALSE); roster_remove("bob@server.org", "bob@server.org"); @@ -683,7 +683,7 @@ remove_contact_with_remaining_in_group(void** state) found = g_list_find_custom(groups_res, "stuff", (GCompareFunc)g_strcmp0); assert_true(found != NULL); - g_list_free_full(groups_res, free); + g_list_free_full(groups_res, g_free); roster_destroy(); } diff --git a/tests/unittests/test_server_events.c b/tests/unittests/test_server_events.c index 4f00fd1bc..37d466206 100644 --- a/tests/unittests/test_server_events.c +++ b/tests/unittests/test_server_events.c @@ -87,7 +87,7 @@ handle_offline_removes_chat_session(void** state) Resource* resourcep = resource_new(resource, RESOURCE_ONLINE, NULL, 10); roster_update_presence(barejid, resourcep, NULL); chat_session_recipient_active(barejid, resource, FALSE); - ProfConsoleWin* console = calloc(1, sizeof(ProfConsoleWin)); + ProfConsoleWin* console = g_new0(ProfConsoleWin, 1); will_return(win_create_console, &console->window); wins_init(); sv_ev_contact_offline(barejid, resource, NULL);