aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--irc_im.c7
-rw-r--r--lib/ssl_gnutls.c12
-rw-r--r--otr.c15
-rw-r--r--protocols/jabber/jabber_util.c1
-rw-r--r--protocols/msn/msn_util.c20
-rw-r--r--protocols/nogaim.c33
-rw-r--r--storage_xml.c2
7 files changed, 56 insertions, 34 deletions
diff --git a/irc_im.c b/irc_im.c
index 0b02ff89..d71c9ee9 100644
--- a/irc_im.c
+++ b/irc_im.c
@@ -234,7 +234,7 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, t
msg = s;
} else {
/* Modules can swallow messages. */
- return TRUE;
+ goto cleanup;
}
}
}
@@ -249,8 +249,9 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, t
wrapped = word_wrap(msg, 425);
irc_send_msg(iu, "PRIVMSG", dst, wrapped, prefix);
-
g_free(wrapped);
+
+cleanup:
g_free(prefix);
g_free(msg);
g_free(ts);
@@ -291,6 +292,8 @@ static gboolean bee_irc_user_action_response(bee_t *bee, bee_user_t *bu, const c
irc_send_msg((irc_user_t *) bu->ui_data, "NOTICE", irc->user->nick, msg->str, NULL);
+ g_string_free(msg, TRUE);
+
return TRUE;
}
diff --git a/lib/ssl_gnutls.c b/lib/ssl_gnutls.c
index 749b00b6..2d52db52 100644
--- a/lib/ssl_gnutls.c
+++ b/lib/ssl_gnutls.c
@@ -123,6 +123,7 @@ void *ssl_connect(char *host, int port, gboolean verify, ssl_input_function func
conn->fd = proxy_connect(host, port, ssl_connected, conn);
if (conn->fd < 0) {
+ g_free(conn->hostname);
g_free(conn);
return NULL;
}
@@ -313,6 +314,7 @@ static gboolean ssl_connected(gpointer data, gint source, b_input_condition cond
if (source == -1) {
conn->func(conn->data, 0, NULL, cond);
+ g_free(conn->hostname);
g_free(conn);
return FALSE;
}
@@ -354,19 +356,13 @@ static gboolean ssl_handshake(gpointer data, gint source, b_input_condition cond
} else {
conn->func(conn->data, 0, NULL, cond);
- gnutls_deinit(conn->session);
- closesocket(conn->fd);
-
- g_free(conn);
+ ssl_disconnect(conn);
}
} else {
if (conn->verify && (stver = verify_certificate_callback(conn->session)) != 0) {
conn->func(conn->data, stver, NULL, cond);
- gnutls_deinit(conn->session);
- closesocket(conn->fd);
-
- g_free(conn);
+ ssl_disconnect(conn);
} else {
/* For now we can't handle non-blocking perfectly everywhere... */
sock_make_blocking(conn->fd);
diff --git a/otr.c b/otr.c
index cadb4842..c6c8cd93 100644
--- a/otr.c
+++ b/otr.c
@@ -286,11 +286,16 @@ gboolean otr_irc_new(irc_t *irc)
void otr_irc_free(irc_t *irc)
{
+ set_t *s;
otr_t *otr = irc->otr;
otr_disconnect_all(irc);
b_event_remove(otr->timer);
otrl_userstate_free(otr->us);
+
+ s = set_find(&irc->b->set, "otr_policy");
+ g_slist_free(s->eval_data);
+
if (otr->keygen) {
kill(otr->keygen, SIGTERM);
waitpid(otr->keygen, NULL, 0);
@@ -434,6 +439,10 @@ char *otr_filter_msg_in(irc_user_t *iu, char *msg, int flags)
ic->acc->user, ic->acc->prpl->name, iu->bu->handle, msg, &newmsg,
&tlvs, NULL, NULL, NULL);
+ if (tlvs) {
+ otrl_tlv_free(tlvs);
+ }
+
if (ignore_msg) {
/* this was an internal OTR protocol message */
return NULL;
@@ -471,7 +480,7 @@ char *otr_filter_msg_out(irc_user_t *iu, char *msg, int flags)
if (otrmsg && otrmsg != msg) {
/* libotr wants us to replace our message */
/* NB: caller will free old msg */
- msg = g_strdup(otrmsg);
+ msg = st ? NULL : g_strdup(otrmsg);
otrl_message_free(otrmsg);
}
@@ -1324,6 +1333,8 @@ void log_otr_message(void *opdata, const char *fmt, ...)
va_end(va);
log_message(LOGLVL_INFO, "otr: %s", msg);
+
+ g_free(msg);
}
void display_otr_message(void *opdata, ConnContext *ctx, const char *fmt, ...)
@@ -2074,5 +2085,3 @@ void otr_disconnect_all(irc_t *irc)
}
}
}
-
-/* vim: set noet ts=4 sw=4: */
diff --git a/protocols/jabber/jabber_util.c b/protocols/jabber/jabber_util.c
index b0bc033f..779d502b 100644
--- a/protocols/jabber/jabber_util.c
+++ b/protocols/jabber/jabber_util.c
@@ -565,6 +565,7 @@ struct jabber_buddy *jabber_buddy_by_ext_jid(struct im_connection *ic, char *jid
jid = jabber_normalize_ext(jid_);
if ((s = strchr(jid, '=')) == NULL) {
+ g_free(jid);
return NULL;
}
diff --git a/protocols/msn/msn_util.c b/protocols/msn/msn_util.c
index 8f929305..5164a8d2 100644
--- a/protocols/msn/msn_util.c
+++ b/protocols/msn/msn_util.c
@@ -173,6 +173,15 @@ struct msn_buddy_ask_data {
char *realname;
};
+static void msn_buddy_ask_free(void *data)
+{
+ struct msn_buddy_ask_data *bla = data;
+
+ g_free(bla->handle);
+ g_free(bla->realname);
+ g_free(bla);
+}
+
static void msn_buddy_ask_yes(void *data)
{
struct msn_buddy_ask_data *bla = data;
@@ -181,9 +190,7 @@ static void msn_buddy_ask_yes(void *data)
imcb_ask_add(bla->ic, bla->handle, NULL);
- g_free(bla->handle);
- g_free(bla->realname);
- g_free(bla);
+ msn_buddy_ask_free(bla);
}
static void msn_buddy_ask_no(void *data)
@@ -192,9 +199,7 @@ static void msn_buddy_ask_no(void *data)
msn_buddy_list_add(bla->ic, MSN_BUDDY_BL, bla->handle, bla->realname, NULL);
- g_free(bla->handle);
- g_free(bla->realname);
- g_free(bla);
+ msn_buddy_ask_free(bla);
}
void msn_buddy_ask(bee_user_t *bu)
@@ -215,7 +220,8 @@ void msn_buddy_ask(bee_user_t *bu)
g_snprintf(buf, sizeof(buf),
"The user %s (%s) wants to add you to his/her buddy list.",
bu->handle, bu->fullname);
- imcb_ask(bu->ic, buf, bla, msn_buddy_ask_yes, msn_buddy_ask_no);
+
+ imcb_ask_with_free(bu->ic, buf, bla, msn_buddy_ask_yes, msn_buddy_ask_no, msn_buddy_ask_free);
}
/* *NOT* thread-safe, but that's not a problem for now... */
diff --git a/protocols/nogaim.c b/protocols/nogaim.c
index 2de24af8..a35b9838 100644
--- a/protocols/nogaim.c
+++ b/protocols/nogaim.c
@@ -497,14 +497,21 @@ struct imcb_ask_cb_data {
char *handle;
};
+static void imcb_ask_cb_free(void *data)
+{
+ struct imcb_ask_cb_data *cbd = data;
+
+ g_free(cbd->handle);
+ g_free(cbd);
+}
+
static void imcb_ask_auth_cb_no(void *data)
{
struct imcb_ask_cb_data *cbd = data;
cbd->ic->acc->prpl->auth_deny(cbd->ic, cbd->handle);
- g_free(cbd->handle);
- g_free(cbd);
+ imcb_ask_cb_free(cbd);
}
static void imcb_ask_auth_cb_yes(void *data)
@@ -513,8 +520,7 @@ static void imcb_ask_auth_cb_yes(void *data)
cbd->ic->acc->prpl->auth_allow(cbd->ic, cbd->handle);
- g_free(cbd->handle);
- g_free(cbd);
+ imcb_ask_cb_free(cbd);
}
void imcb_ask_auth(struct im_connection *ic, const char *handle, const char *realname)
@@ -534,14 +540,9 @@ void imcb_ask_auth(struct im_connection *ic, const char *handle, const char *rea
data->ic = ic;
data->handle = g_strdup(handle);
query_add((irc_t *) ic->bee->ui_data, ic, s,
- imcb_ask_auth_cb_yes, imcb_ask_auth_cb_no, g_free, data);
-}
-
+ imcb_ask_auth_cb_yes, imcb_ask_auth_cb_no, imcb_ask_cb_free, data);
-static void imcb_ask_add_cb_no(void *data)
-{
- g_free(((struct imcb_ask_cb_data*) data)->handle);
- g_free(data);
+ g_free(s);
}
static void imcb_ask_add_cb_yes(void *data)
@@ -550,12 +551,12 @@ static void imcb_ask_add_cb_yes(void *data)
cbd->ic->acc->prpl->add_buddy(cbd->ic, cbd->handle, NULL);
- imcb_ask_add_cb_no(data);
+ imcb_ask_cb_free(data);
}
void imcb_ask_add(struct im_connection *ic, const char *handle, const char *realname)
{
- struct imcb_ask_cb_data *data = g_new0(struct imcb_ask_cb_data, 1);
+ struct imcb_ask_cb_data *data;
char *s;
/* TODO: Make a setting for this! */
@@ -563,12 +564,16 @@ void imcb_ask_add(struct im_connection *ic, const char *handle, const char *real
return;
}
+ data = g_new0(struct imcb_ask_cb_data, 1);
+
s = g_strdup_printf("The user %s is not in your buddy list yet. Do you want to add him/her now?", handle);
data->ic = ic;
data->handle = g_strdup(handle);
query_add((irc_t *) ic->bee->ui_data, ic, s,
- imcb_ask_add_cb_yes, imcb_ask_add_cb_no, g_free, data);
+ imcb_ask_add_cb_yes, imcb_ask_cb_free, imcb_ask_cb_free, data);
+
+ g_free(s);
}
struct bee_user *imcb_buddy_by_handle(struct im_connection *ic, const char *handle)
diff --git a/storage_xml.c b/storage_xml.c
index 38a73d87..4237e10e 100644
--- a/storage_xml.c
+++ b/storage_xml.c
@@ -127,6 +127,8 @@ static xt_status handle_account(struct xt_node *node, gpointer data)
acc->flags |= ACC_FLAG_LOCAL;
}
} else {
+ g_free(pass_cr);
+ g_free(password);
return XT_ABORT;
}