--- a/ChangeLog Wed Feb 15 22:26:40 2012 +0000
+++ b/ChangeLog Wed Feb 15 22:27:43 2012 +0000
@@ -1,5 +1,28 @@
Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
+version 2.10.2 (02/22/2012): + * Fix compilation when using binutils 2.22 and new GDK pixbuf. (#14799) + * Add support for the GNOME3 Network dialog. (#13882) + * Support new connection states and signals for NetworkManager 0.9+. + (Dan Williams) (#13859) + * Allow signing on with usernames containing periods and + * Allow adding buddies containing periods and underscores. (#13500) + * Fix possible crashes caused by not validating incoming messages as + UTF-8. (Thijs Alkemade) (#14884) + Windows-Specific Changes: + * Fix compilation of the Bonjour protocol plugin. (#14802) version 2.10.1 (12/06/2011):
* Fix compilation on OpenBSD.
--- a/configure.ac Wed Feb 15 22:26:40 2012 +0000
+++ b/configure.ac Wed Feb 15 22:27:43 2012 +0000
@@ -202,6 +202,12 @@
dnl FreeBSD doesn't have libdl, dlopen is provided by libc
AC_CHECK_FUNC(dlopen, LIBDL="", [AC_CHECK_LIB(dl, dlopen, LIBDL="-ldl")])
+dnl Haiku does not use libm for the math functions, they are part +AC_SEARCH_LIBS([ceil], [m], [], [ + AC_MSG_ERROR([unable to find the floor() function]) AC_MSG_CHECKING(for fileno())
AC_RUN_IFELSE([AC_LANG_SOURCE([[
--- a/libpurple/network.c Wed Feb 15 22:26:40 2012 +0000
+++ b/libpurple/network.c Wed Feb 15 22:27:43 2012 +0000
@@ -833,8 +833,20 @@
purple_debug_warning("network", "NetworkManager not active. Assuming connection exists.\n");
- if (nm_state == NM_STATE_UNKNOWN || nm_state == NM_STATE_CONNECTED)
+#if NM_CHECK_VERSION(0,8,992) + case NM_STATE_CONNECTED_LOCAL: + case NM_STATE_CONNECTED_SITE: + case NM_STATE_CONNECTED_GLOBAL: + case NM_STATE_CONNECTED: @@ -1171,9 +1183,14 @@
dbus_g_proxy_add_signal(nm_proxy, "StateChange", G_TYPE_UINT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(nm_proxy, "StateChange",
G_CALLBACK(nm_state_change_cb), NULL, NULL);
+ /* NM 0.7 and later signal */ + dbus_g_proxy_add_signal(nm_proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_proxy_connect_signal(nm_proxy, "StateChanged", + G_CALLBACK(nm_state_change_cb), NULL, NULL); dbus_proxy = dbus_g_proxy_new_for_name(nm_conn,
@@ -1208,6 +1225,7 @@
#ifdef HAVE_NETWORKMANAGER
dbus_g_proxy_disconnect_signal(nm_proxy, "StateChange", G_CALLBACK(nm_state_change_cb), NULL);
+ dbus_g_proxy_disconnect_signal(nm_proxy, "StateChanged", G_CALLBACK(nm_state_change_cb), NULL); g_object_unref(G_OBJECT(nm_proxy));
--- a/libpurple/protocols/msn/contact.h Wed Feb 15 22:26:40 2012 +0000
+++ b/libpurple/protocols/msn/contact.h Wed Feb 15 22:27:43 2012 +0000
@@ -62,7 +62,7 @@
#define MSN_APPLICATION_ID "CFE80F9D-180F-4399-82AB-413F33A1FA11"
-#define MSN_CONTACT_SERVER "omega.contacts.msn.com"
+#define MSN_CONTACT_SERVER "local-bay.contacts.msn.com" --- a/libpurple/protocols/msn/oim.c Wed Feb 15 22:26:40 2012 +0000
+++ b/libpurple/protocols/msn/oim.c Wed Feb 15 22:27:43 2012 +0000
@@ -606,11 +606,12 @@
- char *decode_msg = NULL;
+ char *decode_msg = NULL, *clean_msg = NULL; + const char *charset = NULL; message = msn_message_new(MSN_MSG_UNKNOWN);
@@ -638,6 +639,8 @@
type = msn_message_get_content_type(multipart);
if (type && !strcmp(type, "text/plain")) {
decode_msg = (char *)purple_base64_decode(multipart->body, &body_len);
+ charset = msn_message_get_charset(multipart); msn_message_unref(multipart);
@@ -654,6 +657,46 @@
decode_msg = (char *)purple_base64_decode(message->body, &body_len);
+ charset = msn_message_get_charset(message); + if (charset && !((strncasecmp(charset, "UTF-8", 5) == 0) || (strncasecmp(charset, "UTF8", 4) == 0))) { + clean_msg = g_convert(decode_msg, body_len, "UTF-8", charset, NULL, NULL, NULL); + char *clean = purple_utf8_salvage(decode_msg); + purple_debug_error("msn", "Failed to convert charset from %s to UTF-8 for OIM message: %s\n", charset, clean); + clean_msg = g_strdup_printf(_("%s (There was an error receiving this message. " + "Converting the encoding from %s to UTF-8 failed.)"), + } else if (!g_utf8_validate(decode_msg, body_len, NULL)) { + char *clean = purple_utf8_salvage(decode_msg); + purple_debug_error("msn", "Received an OIM message that is not UTF-8," + " and no encoding specified: %s\n", clean); + clean_msg = g_strdup_printf(_("%s (There was an error receiving this message." + " The charset was %s, but it was not valid UTF-8.)"), + clean_msg = g_strdup_printf(_("%s (There was an error receiving this message." + " The charset was missing, but it was not valid UTF-8.)"), + clean_msg = decode_msg; from = msn_message_get_header_value(message, "X-OIM-originatingSource");
@@ -695,7 +738,7 @@
purple_debug_info("msn", "oim Date:{%s},passport{%s}\n",
- serv_got_im(rdata->oim->session->account->gc, passport, decode_msg, 0,
+ serv_got_im(purple_account_get_connection(rdata->oim->session->account), passport, clean_msg, 0, /*Now get the oim message ID from the oim_list.
@@ -704,7 +747,7 @@
msn_oim_post_delete_msg(rdata);
msn_message_unref(message);
--- a/libpurple/protocols/oscar/peer.c Wed Feb 15 22:26:40 2012 +0000
+++ b/libpurple/protocols/oscar/peer.c Wed Feb 15 22:27:43 2012 +0000
@@ -660,6 +660,7 @@
FlapConnection *bos_conn;
unsigned short listener_port;
@@ -694,11 +695,28 @@
listener_ip = purple_network_get_my_ip(bos_conn->gsc->fd);
listener_ip = purple_network_get_my_ip(bos_conn->fd);
+ ip_atoi = purple_network_ip_atoi(listener_ip); + /* Could not convert IP to 4 byte array--weird, but this does + happen for some users (#4829, Adium #15839). Maybe they're + connecting with IPv6...? Maybe through a proxy? */ + purple_debug_error("oscar", "Can't ask peer to connect to us " + "because purple_network_ip_atoi(%s) returned NULL. " + listener_ip ? listener_ip : "(null)", + bos_conn->gsc ? bos_conn->gsc->fd : bos_conn->fd, + bos_conn->gsc ? 1 : 0); + peer_connection_trynext(conn); listener_port = purple_network_get_port_from_fd(conn->listenerfd);
if (conn->type == OSCAR_CAPABILITY_DIRECTIM)
aim_im_sendch2_odc_requestdirect(od,
- conn->cookie, conn->bn, purple_network_ip_atoi(listener_ip),
+ conn->cookie, conn->bn, ip_atoi, listener_port, ++conn->lastrequestnumber);
/* Print a message to a local conversation window */
@@ -710,15 +728,6 @@
else if (conn->type == OSCAR_CAPABILITY_SENDFILE)
- const guchar *ip_atoi = purple_network_ip_atoi(listener_ip);
- purple_debug_error("oscar", "Cannot send file. atoi(%s) failed.\n"
- "Other possibly useful information: fd = %d, port = %d\n",
- listener_ip ? listener_ip : "(null!)", conn->listenerfd,
- purple_xfer_cancel_local(conn->xfer);
aim_im_sendch2_sendfile_requestdirect(od,
--- a/libpurple/protocols/oscar/util.c Wed Feb 15 22:26:40 2012 +0000
+++ b/libpurple/protocols/oscar/util.c Wed Feb 15 22:27:43 2012 +0000
@@ -141,12 +141,12 @@
if (purple_email_is_valid(name))
- /* Normal AIM usernames can't start with a number */
+ /* Normal AIM usernames can't start with a number, period or underscore */ + if (isalnum(name[0]) == 0) for (i = 0; name[i] != '\0'; i++) {
- if (!isalnum(name[i]) && (name[i] != ' '))
+ if (!isalnum(name[i]) && name[i] != ' ' && name[i] != '.' && name[i] != '_') --- a/libpurple/proxy.c Wed Feb 15 22:26:40 2012 +0000
+++ b/libpurple/proxy.c Wed Feb 15 22:27:43 2012 +0000
@@ -2404,7 +2404,7 @@
PurpleProxyConnectFunction connect_cb,
- return purple_proxy_connect_socks5_account(NULL, handle, gpi,
+ return purple_proxy_connect_socks5_account(handle, NULL, gpi, host, port, connect_cb, data);
--- a/pidgin/gtkprefs.c Wed Feb 15 22:26:40 2012 +0000
+++ b/pidgin/gtkprefs.c Wed Feb 15 22:27:43 2012 +0000
@@ -2036,6 +2036,14 @@
path = g_find_program_in_path("gnome-network-properties");
path = g_find_program_in_path("gnome-network-preferences");
+ path = g_find_program_in_path("gnome-control-center"); + char *tmp = g_strdup_printf("%s network", path); label = gtk_label_new(NULL);