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);
fputs("
\n", main_fragment);
@@ -3045,8 +3051,6 @@ command_docgen(void)
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);