changeset 20295:f837139b3732

merge of '554f47773ad015df16569e503432329570fa1564' and '868723337c9f90e7c57c05f7fc0178338339179d'
author Luke Schierer <lschiere@pidgin.im>
date Mon, 01 Oct 2007 16:41:18 +0000
parents 19d83c5f644d (diff) d41907afb521 (current diff)
children 48f03c46b86b 15f61e6b15cd
files
diffstat 8 files changed, 64 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Sep 29 18:01:34 2007 +0000
+++ b/ChangeLog	Mon Oct 01 16:41:18 2007 +0000
@@ -1,6 +1,6 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-Version 2.2.1:
+Version 2.2.1 (09/29/2007):
 	http://developer.pidgin.im/query?status=closed&milestone=2.2.1
 		NOTE: Due to the backporting that happened for the actual
 		      release, it is possible bugs marked as fixed in 2.2.1
@@ -11,11 +11,15 @@
 	* Cancelling the password prompt for an account will no longer leave
 	  it in an ambiguous state.  (It will be disabled.)
 	* Fixed an erroneous size display for MSN file transfers. (galt)
+	* Fixed multiple memory leaks, particularly in XMPP and MySpace
+	  protocols
+	* Fixed remembering proxy preferences and status scores
 	* Gmail notifications are better tracked
 
 	Pidgin:
 	* Fixed keyboard tab reordering to move tabs one step instead of two.
 	* You should no longer lose proxy settings when Pidgin is restarted.
+	* Fixed detection of X11 when compiling
 
 	Finch:
 	* Pressing 'Insert' in the buddylist will bring up the 'Add Buddy'
@@ -28,7 +32,7 @@
 	* New protocol plugin: MySpaceIM (Jeff Connelly, Google Summer of
 	  Code)
 	* XMPP enhancements. See
- 	  http://www.adiumx.com/blog/2007/07/soc-xmpp-update.php (Andreas 
+	  http://www.adiumx.com/blog/2007/07/soc-xmpp-update.php (Andreas 
 	  Monitzer, Google Summer of Code for Adium)
 	* Certificate management. Libpurple will validate certificates on
 	  SSL-encrypted protocols (William Ehlhardt, Google Summer of Code)
--- a/NEWS	Sat Sep 29 18:01:34 2007 +0000
+++ b/NEWS	Mon Oct 01 16:41:18 2007 +0000
@@ -5,6 +5,20 @@
 	ready for a general release.  Instead, this is basically a bug fix
 	release.
 
+	Luke: Unfortunately the necessity of this bug fix release means
+	some of the tickets that have been closed as part of the 2.2.1
+	milestone are not actually fixed yet.  We have grabbed as many
+	of the changes as we could while avoiding those that are as
+	yet unstable though, and this should still be a marked
+	improvement over 2.2.0.  We have spent a lot of time since the
+	last release looking at the tickets that have been submitted
+	and many of them have been closed.
+
+	Stu: I haven't NEWS'd in a while. I haven't actually done much for
+	too long also, maybe I'll find some time soon. This release is
+	basically what 2.2.0 should have been - it actually compiles this
+	time.
+
 2.2.0 (9/13/2007):
 	Sean: 2.2.0 contains the results of several major Google Summer
 	of Code branches bringing some new, extraordinary features. We
--- a/finch/libgnt/gntstyle.c	Sat Sep 29 18:01:34 2007 +0000
+++ b/finch/libgnt/gntstyle.c	Mon Oct 01 16:41:18 2007 +0000
@@ -26,7 +26,6 @@
 
 #include <glib.h>
 #include <ctype.h>
-#include <glib/gprintf.h>
 #include <stdlib.h>
 #include <string.h>
 
--- a/finch/libgnt/gntwm.c	Sat Sep 29 18:01:34 2007 +0000
+++ b/finch/libgnt/gntwm.c	Mon Oct 01 16:41:18 2007 +0000
@@ -27,8 +27,8 @@
 
 #include "config.h"
 
+#include <glib.h>
 #include <ctype.h>
-#include <glib/gprintf.h>
 #include <gmodule.h>
 #include <stdlib.h>
 #include <string.h>
--- a/libpurple/plugins/ssl/ssl-gnutls.c	Sat Sep 29 18:01:34 2007 +0000
+++ b/libpurple/plugins/ssl/ssl-gnutls.c	Mon Oct 01 16:41:18 2007 +0000
@@ -163,9 +163,9 @@
 		g_list_free(peers);
 
 		{
-			const gnutls_datum_t *cert_list;
+			const gnutls_datum *cert_list;
 			unsigned int cert_list_size = 0;
-			gnutls_session_t session=gnutls_data->session;
+			gnutls_session session=gnutls_data->session;
 			int i;
 
 			cert_list =
@@ -182,7 +182,7 @@
 				gchar tbuf[256];
 				gsize tsz=sizeof(tbuf);
 				gchar * tasc = NULL;
-				gnutls_x509_crt_t cert;
+				gnutls_x509_crt cert;
 
 				gnutls_x509_crt_init(&cert);
 				gnutls_x509_crt_import (cert, &cert_list[i],
@@ -365,7 +365,7 @@
 
 /* Forward declarations are fun! */
 static PurpleCertificate *
-x509_import_from_datum(const gnutls_datum_t dt, gnutls_x509_crt_fmt_t mode);
+x509_import_from_datum(const gnutls_datum dt, gnutls_x509_crt_fmt mode);
 
 static GList *
 ssl_gnutls_get_peer_certificates(PurpleSslConnection * gsc)
@@ -376,7 +376,7 @@
 	GList * peer_certs = NULL;
 
 	/* List of raw certificates as given by GnuTLS */
-	const gnutls_datum_t *cert_list;
+	const gnutls_datum *cert_list;
 	unsigned int cert_list_size = 0;
 
 	unsigned int i;
@@ -414,7 +414,7 @@
 /** Refcounted GnuTLS certificate data instance */
 typedef struct {
 	gint refcount;
-	gnutls_x509_crt_t crt;
+	gnutls_x509_crt crt;
 } x509_crtdata_t;
 
 /** Helper functions for reference counting */
@@ -446,7 +446,7 @@
 /** Helper macro to retrieve the GnuTLS crt_t from a PurpleCertificate */
 #define X509_GET_GNUTLS_DATA(pcrt) ( ((x509_crtdata_t *) (pcrt->data))->crt)
 
-/** Transforms a gnutls_datum_t containing an X.509 certificate into a Certificate instance under the x509_gnutls scheme
+/** Transforms a gnutls_datum containing an X.509 certificate into a Certificate instance under the x509_gnutls scheme
  *
  * @param dt   Datum to transform
  * @param mode GnuTLS certificate format specifier (GNUTLS_X509_FMT_PEM for
@@ -456,7 +456,7 @@
  * @return A newly allocated Certificate structure of the x509_gnutls scheme
  */
 static PurpleCertificate *
-x509_import_from_datum(const gnutls_datum_t dt, gnutls_x509_crt_fmt_t mode)
+x509_import_from_datum(const gnutls_datum dt, gnutls_x509_crt_fmt mode)
 {
 	/* Internal certificate data structure */
 	x509_crtdata_t *certdat;
@@ -491,7 +491,7 @@
 	PurpleCertificate *crt;  /* Certificate being constructed */
 	gchar *buf;        /* Used to load the raw file data */
 	gsize buf_sz;      /* Size of the above */
-	gnutls_datum_t dt; /* Struct to pass down to GnuTLS */
+	gnutls_datum dt; /* Struct to pass down to GnuTLS */
 
 	purple_debug_info("gnutls",
 			  "Attempting to load X.509 certificate from %s\n",
@@ -532,7 +532,7 @@
 static gboolean
 x509_export_certificate(const gchar *filename, PurpleCertificate *crt)
 {
-	gnutls_x509_crt_t crt_dat; /* GnuTLS cert struct */
+	gnutls_x509_crt crt_dat; /* GnuTLS cert struct */
 	int ret;
 	gchar * out_buf; /* Data to output */
 	size_t out_size; /* Output size */
@@ -639,8 +639,8 @@
 x509_certificate_signed_by(PurpleCertificate * crt,
 			   PurpleCertificate * issuer)
 {
-	gnutls_x509_crt_t crt_dat;
-	gnutls_x509_crt_t issuer_dat;
+	gnutls_x509_crt crt_dat;
+	gnutls_x509_crt issuer_dat;
 	unsigned int verify; /* used to store result from GnuTLS verifier */
 	int ret;
 
@@ -673,10 +673,10 @@
 			purple_debug_info("gnutls/x509",
 					  "Certificate for %s claims to be "
 					  "issued by %s, but the certificate "
-					  "for %s does not match. A strcmp "
-					  "says %d\n",
-					  crt_id, crt_issuer_id, issuer_id,
-					  strcmp(crt_issuer_id, issuer_id));
+					  "for %s does not match.\n",
+					  crt_id ? crt_id : "(null)",
+					  crt_issuer_id ? crt_issuer_id : "(null)",
+					  issuer_id ? issuer_id : "(null)");
 			g_free(crt_id);
 			g_free(issuer_id);
 			g_free(crt_issuer_id);
@@ -726,7 +726,7 @@
 {
 	size_t hashlen = 20; /* SHA1 hashes are 20 bytes */
 	size_t tmpsz = hashlen; /* Throw-away variable for GnuTLS to stomp on*/
-	gnutls_x509_crt_t crt_dat;
+	gnutls_x509_crt crt_dat;
 	GByteArray *hash; /**< Final hash container */
 	guchar hashbuf[hashlen]; /**< Temporary buffer to contain hash */
 
@@ -753,7 +753,7 @@
 static gchar *
 x509_cert_dn (PurpleCertificate *crt)
 {
-	gnutls_x509_crt_t cert_dat;
+	gnutls_x509_crt cert_dat;
 	gchar *dn = NULL;
 	size_t dn_size;
 
@@ -769,7 +769,10 @@
 	gnutls_x509_crt_get_dn(cert_dat, dn, &dn_size);
 
 	/* Now allocate and get the Distinguished Name */
-	dn = g_new0(gchar, dn_size);
+	/* Old versions of GnuTLS have an off-by-one error in reporting
+	   the size of the needed buffer in some functions, so allocate
+	   an extra byte */
+	dn = g_new0(gchar, ++dn_size);
 	if (0 != gnutls_x509_crt_get_dn(cert_dat, dn, &dn_size)) {
 		purple_debug_error("gnutls/x509",
 				   "Failed to get Distinguished Name\n");
@@ -783,7 +786,7 @@
 static gchar *
 x509_issuer_dn (PurpleCertificate *crt)
 {
-	gnutls_x509_crt_t cert_dat;
+	gnutls_x509_crt cert_dat;
 	gchar *dn = NULL;
 	size_t dn_size;
 
@@ -799,7 +802,10 @@
 	gnutls_x509_crt_get_issuer_dn(cert_dat, dn, &dn_size);
 
 	/* Now allocate and get the Distinguished Name */
-	dn = g_new0(gchar, dn_size);
+	/* Old versions of GnuTLS have an off-by-one error in reporting
+	   the size of the needed buffer in some functions, so allocate
+	   an extra byte */
+	dn = g_new0(gchar, ++dn_size);
 	if (0 != gnutls_x509_crt_get_issuer_dn(cert_dat, dn, &dn_size)) {
 		purple_debug_error("gnutls/x509",
 				   "Failed to get issuer's Distinguished "
@@ -814,7 +820,7 @@
 static gchar *
 x509_common_name (PurpleCertificate *crt)
 {
-	gnutls_x509_crt_t cert_dat;
+	gnutls_x509_crt cert_dat;
 	gchar *cn = NULL;
 	size_t cn_size;
 	int ret;
@@ -835,7 +841,10 @@
 				      cn, &cn_size);
 
 	/* Now allocate and get the Common Name */
-	cn = g_new0(gchar, cn_size);
+	/* Old versions of GnuTLS have an off-by-one error in reporting
+	   the size of the needed buffer in some functions, so allocate
+	   an extra byte */
+	cn = g_new0(gchar, ++cn_size);
 	ret = gnutls_x509_crt_get_dn_by_oid(cert_dat,
 					    GNUTLS_OID_X520_COMMON_NAME,
 					    0, /* First CN found, please */
@@ -854,7 +863,7 @@
 static gboolean
 x509_check_name (PurpleCertificate *crt, const gchar *name)
 {
-	gnutls_x509_crt_t crt_dat;
+	gnutls_x509_crt crt_dat;
 
 	g_return_val_if_fail(crt, FALSE);
 	g_return_val_if_fail(crt->scheme == &x509_gnutls, FALSE);
@@ -872,7 +881,7 @@
 static gboolean
 x509_times (PurpleCertificate *crt, time_t *activation, time_t *expiration)
 {
-	gnutls_x509_crt_t crt_dat;
+	gnutls_x509_crt crt_dat;
 	/* GnuTLS time functions return this on error */
 	const time_t errval = (time_t) (-1);
 
--- a/libpurple/protocols/jabber/jutil.h	Sat Sep 29 18:01:34 2007 +0000
+++ b/libpurple/protocols/jabber/jutil.h	Mon Oct 01 16:41:18 2007 +0000
@@ -22,8 +22,6 @@
 #ifndef _PURPLE_JABBER_JUTIL_H_
 #define _PURPLE_JABBER_JUTIL_H_
 
-#include "account.h"
-
 typedef struct _JabberID {
 	char *node;
 	char *domain;
--- a/pidgin/gtkconv.c	Sat Sep 29 18:01:34 2007 +0000
+++ b/pidgin/gtkconv.c	Mon Oct 01 16:41:18 2007 +0000
@@ -6758,7 +6758,9 @@
 
 	event = gtk_event_box_new();
 	gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event);
+#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE);
+#endif
 	gtk_widget_add_events(event,
                               GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
 	g_signal_connect(G_OBJECT(event), "button-press-event",
@@ -8864,7 +8866,9 @@
 
 	/* Close button. */
 	gtkconv->close = gtk_event_box_new();
+#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(gtkconv->close), FALSE);
+#endif
 	gtk_widget_set_events(gtkconv->close, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
 	close_image = gtk_label_new("×");
 	g_signal_connect(G_OBJECT(gtkconv->close), "enter-notify-event", G_CALLBACK(close_button_entered_cb), close_image);
--- a/pidgin/gtknotify.c	Sat Sep 29 18:01:34 2007 +0000
+++ b/pidgin/gtknotify.c	Mon Oct 01 16:41:18 2007 +0000
@@ -430,7 +430,12 @@
 						PIDGIN_MAIL_DATA, &data, -1);
 				if (data->account == account) {
 					if (clear) {
+#if GTK_CHECK_VERSION(2,2,0)
 						advanced = gtk_tree_store_remove(treemodel, &iter);
+#else
+						gtk_tree_store_remove(treemodel, &iter);
+						advanced = (iter.stamp == 0) ? FALSE : TRUE;
+#endif
 						purple_notify_close(PURPLE_NOTIFY_EMAILS, data);
 						/* We're completely done if we've processed all entries */
 						if (!advanced)