summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2019-03-13 00:03:02 -0400
committerElliott Sales de Andrade <qulogic@pidgin.im>2019-03-13 00:03:02 -0400
commit04bc0096cc4afd36c30eb5639428f7c398618847 (patch)
treed6cd4b1890b7c1f066af628ebea22b155684f3a6
parentce009123926db6ee76341597673377afd7c2c101 (diff)
downloadpidgin-04bc0096cc4afd36c30eb5639428f7c398618847.tar.gz
Fix some possible use-after-free.
Some of these are "false" positives since they are only comparing pointers, but it's also technically undefined behaviour.
-rw-r--r--libpurple/protocols/bonjour/mdns_common.c2
-rw-r--r--libpurple/protocols/novell/nmuser.c2
-rw-r--r--libpurple/protocols/sametime/sametime.c2
-rw-r--r--libpurple/protocols/zephyr/zephyr.c2
-rw-r--r--libpurple/util.c2
5 files changed, 4 insertions, 6 deletions
diff --git a/libpurple/protocols/bonjour/mdns_common.c b/libpurple/protocols/bonjour/mdns_common.c
index ec9830c2a9..f19b2b955f 100644
--- a/libpurple/protocols/bonjour/mdns_common.c
+++ b/libpurple/protocols/bonjour/mdns_common.c
@@ -142,7 +142,7 @@ static void free_presence_txt_records(GSList *lst) {
g_free(kvp->key);
g_free(kvp->value);
g_free(kvp);
- lst = g_slist_remove(lst, lst->data);
+ lst = g_slist_delete_link(lst, lst);
}
}
diff --git a/libpurple/protocols/novell/nmuser.c b/libpurple/protocols/novell/nmuser.c
index 1452c4b67a..8255addb3c 100644
--- a/libpurple/protocols/novell/nmuser.c
+++ b/libpurple/protocols/novell/nmuser.c
@@ -1524,7 +1524,7 @@ _handle_multiple_get_details_joinconf_cb(NMUser * user, NMERR_T ret_code,
if (nm_utf8_str_equal(nm_user_record_get_dn(user_record),
(const char *) node->data)) {
g_free(node->data);
- list = g_slist_remove(list, node->data);
+ list = g_slist_delete_link(list, node);
nm_request_set_user_define(request, list);
break;
}
diff --git a/libpurple/protocols/sametime/sametime.c b/libpurple/protocols/sametime/sametime.c
index 6eed304edb..f54e1df491 100644
--- a/libpurple/protocols/sametime/sametime.c
+++ b/libpurple/protocols/sametime/sametime.c
@@ -1646,7 +1646,6 @@ static void mw_session_setPrivacyInfo(struct mwSession *session) {
if (privacy->deny) {
while ((list = purple_account_privacy_get_denied(acct))) {
- g_free(list->data);
purple_account_privacy_deny_remove(acct, list->data, TRUE);
}
while (count--) {
@@ -1655,7 +1654,6 @@ static void mw_session_setPrivacyInfo(struct mwSession *session) {
}
} else {
while ((list = purple_account_privacy_get_permitted(acct))) {
- g_free(list->data);
purple_account_privacy_permit_remove(acct, list->data, TRUE);
}
while (count--) {
diff --git a/libpurple/protocols/zephyr/zephyr.c b/libpurple/protocols/zephyr/zephyr.c
index 905831a68c..c5df24de54 100644
--- a/libpurple/protocols/zephyr/zephyr.c
+++ b/libpurple/protocols/zephyr/zephyr.c
@@ -743,7 +743,7 @@ static gboolean pending_zloc(zephyr_account *zephyr, const char *who)
char* normalized_who = local_zephyr_normalize(zephyr,who);
if (!g_ascii_strcasecmp(normalized_who, (char *)curr->data)) {
g_free((char *)curr->data);
- zephyr->pending_zloc_names = g_list_remove(zephyr->pending_zloc_names, curr->data);
+ zephyr->pending_zloc_names = g_list_delete_link(zephyr->pending_zloc_names, curr);
return TRUE;
}
}
diff --git a/libpurple/util.c b/libpurple/util.c
index d60ca6e2a8..2667612762 100644
--- a/libpurple/util.c
+++ b/libpurple/util.c
@@ -1868,7 +1868,7 @@ purple_markup_html_to_xhtml(const char *html, char **xhtml_out,
g_free(pt);
}
g_free(tag->data);
- tags = g_list_remove(tags, tag->data);
+ tags = g_list_delete_link(tags, tag);
} else {
/* a closing tag we weren't expecting...
* we'll let it slide, if it's really a tag...if it's