libpurple 32535:a97104490e3e: Patch from fain: check whether the...
commits at adium.im
commits at adium.im
Wed Oct 23 14:26:31 UTC 2013
details: http://hg.adium.im/libpurple/rev/a97104490e3e
revision: 32535:a97104490e3e
branch: adium-1.5.x
author: Thijs Alkemade <me at thijsalkema.de>
date: Wed Oct 23 16:22:26 2013 +0200
Patch from fain: check whether the passed arguments are equal to the current values in the setters of ft.c before freeing them. This should fix crashes when receiving file transfers.
Refs #15755
diffs (66 lines):
diff -r c8e809dffa1d -r a97104490e3e libpurple/ft.c
--- a/libpurple/ft.c Thu Feb 21 23:07:08 2013 +0100
+++ b/libpurple/ft.c Wed Oct 23 16:22:26 2013 +0200
@@ -914,9 +914,10 @@
purple_xfer_set_message(PurpleXfer *xfer, const char *message)
{
g_return_if_fail(xfer != NULL);
-
- g_free(xfer->message);
- xfer->message = g_strdup(message);
+ if (message != xfer->message) {
+ g_free(xfer->message);
+ xfer->message = g_strdup(message);
+ }
}
void
@@ -924,8 +925,10 @@
{
g_return_if_fail(xfer != NULL);
- g_free(xfer->filename);
- xfer->filename = g_strdup(filename);
+ if (filename != xfer->filename) {
+ g_free(xfer->filename);
+ xfer->filename = g_strdup(filename);
+ }
}
void
@@ -933,8 +936,10 @@
{
g_return_if_fail(xfer != NULL);
- g_free(xfer->local_filename);
- xfer->local_filename = g_strdup(filename);
+ if (filename != xfer->local_filename) {
+ g_free(xfer->local_filename);
+ xfer->local_filename = g_strdup(filename);
+ }
}
void
@@ -1679,8 +1684,9 @@
{
PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer);
- g_free(priv->thumbnail_data);
- g_free(priv->thumbnail_mimetype);
+ /* Hold onto these in case they are equal to passed-in pointers */
+ gpointer *old_thumbnail_data = priv->thumbnail_data;
+ const gchar *old_mimetype = priv->thumbnail_mimetype;
if (thumbnail && size > 0) {
priv->thumbnail_data = g_memdup(thumbnail, size);
@@ -1691,6 +1697,10 @@
priv->thumbnail_size = 0;
priv->thumbnail_mimetype = NULL;
}
+
+ /* Now it's safe to free the pointers */
+ g_free(old_thumbnail_data);
+ g_free(old_mimetype);
}
void
More information about the commits
mailing list