libpurple/xfer.c

changeset 38358
30ba44276e74
parent 38254
41ce9e8bd35f
parent 37644
451ed08be0b9
child 38368
61f85dabe64e
--- a/libpurple/xfer.c	Mon Jun 12 01:00:04 2017 +0000
+++ b/libpurple/xfer.c	Mon Jun 12 17:48:37 2017 -0300
@@ -977,8 +977,10 @@
 
 	g_return_if_fail(priv != NULL);
 
-	g_free(priv->message);
-	priv->message = g_strdup(message);
+	if (message != priv->message) {
+		g_free(priv->message);
+		priv->message = g_strdup(message);
+	}
 
 	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_MESSAGE]);
 }
@@ -1000,8 +1002,10 @@
 
 	g_return_if_fail(priv != NULL);
 
-	g_free(priv->filename);
-	priv->filename = g_strdup(filename);
+	if (filename != priv->filename) {
+		g_free(priv->filename);
+		priv->filename = g_strdup(filename);
+	}
 
 	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_FILENAME]);
 }
@@ -1013,8 +1017,10 @@
 
 	g_return_if_fail(priv != NULL);
 
-	g_free(priv->local_filename);
-	priv->local_filename = g_strdup(filename);
+	if (filename != priv->local_filename) {
+		g_free(priv->local_filename);
+		priv->local_filename = g_strdup(filename);
+	}
 
 	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_LOCAL_FILENAME]);
 }
@@ -1917,8 +1923,9 @@
 
 	g_return_if_fail(priv != NULL);
 
-	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);
@@ -1929,6 +1936,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

mercurial