summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Kramlich <grim@reaperworld.com>2017-04-11 00:18:26 +0000
committerGary Kramlich <grim@reaperworld.com>2017-04-11 00:18:26 +0000
commit4f5213da31f559e0c4baa68cebcc0fa771f68977 (patch)
treed3e7fb1c68d23fb7694aea840546eb2b828e087b
parent303d892d6f0a89144fc6e2c9622acb14dc777930 (diff)
parentdea465676804d655d55c50debd3027755285e350 (diff)
downloadpidgin-4f5213da31f559e0c4baa68cebcc0fa771f68977.tar.gz
Merged in rw_grim/pidgin/release-2.x.y (pull request #187)
Applying fain's patch which fixes 15755 Approved-by: Eion Robb <eionrobb@gmail.com> Approved-by: Ethan Blanton <elb@kb8ojh.net> Approved-by: Gary Kramlich <grim@reaperworld.com>
-rw-r--r--libpurple/ft.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/libpurple/ft.c b/libpurple/ft.c
index fb83ef09a2..c15efcfa70 100644
--- a/libpurple/ft.c
+++ b/libpurple/ft.c
@@ -916,9 +916,10 @@ void
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
@@ -926,8 +927,10 @@ purple_xfer_set_filename(PurpleXfer *xfer, const char *filename)
{
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
@@ -935,8 +938,10 @@ purple_xfer_set_local_filename(PurpleXfer *xfer, const char *filename)
{
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
@@ -1781,8 +1786,9 @@ purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail,
{
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);
@@ -1793,6 +1799,10 @@ purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail,
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