diff --git a/pidgin-2.7.0-chatfilter.patch b/pidgin-2.7.0-chatfilter.patch new file mode 100644 index 0000000..605187b --- /dev/null +++ b/pidgin-2.7.0-chatfilter.patch @@ -0,0 +1,30 @@ +----------------------------------------------------------------- +Revision: 13fbe0815f84d5b3c001947559f5818c10275f4c +Ancestor: cfe0e649dda34d9252d40d8f67e445336a247998 +Author: nosnilmot@pidgin.im +Date: 05/17/2010 01:11:01 AM +Branch: im.pidgin.pidgin + +Modified files: + pidgin/gtkblist.c + +ChangeLog: + +Prevent a null pointer dereference in chat_account_filter_func() if called +on a disconnected or disconnecting account. +This should fix https://bugzilla.redhat.com/show_bug.cgi?id=592750 + + +============================================================ +--- pidgin/gtkblist.c 59572bc5415328dec42852173febb8e6d216f911 ++++ pidgin/gtkblist.c cbe664829ff51113e1fda2ec2c6f1791a3b46c47 +@@ -942,6 +942,9 @@ chat_account_filter_func(PurpleAccount * + PurpleConnection *gc = purple_account_get_connection(account); + PurplePluginProtocolInfo *prpl_info = NULL; + ++ if (gc == NULL) ++ return FALSE; ++ + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + + return (prpl_info->chat_info != NULL); diff --git a/pidgin-2.7.0-icqhtml.patch b/pidgin-2.7.0-icqhtml.patch new file mode 100644 index 0000000..210d260 --- /dev/null +++ b/pidgin-2.7.0-icqhtml.patch @@ -0,0 +1,67 @@ +Manually edited to make it compile +----------------------------------------------------------------- +Revision: 3c30f64efedafc379b6536852bbb3b6ef5f1f6c9 +Ancestor: 0e263caa5d687101e436029f2f8d09053ae06e23 +Author: ivan.komarov@soc.pidgin.im +Date: 05/03/2010 09:49:14 PM +Branch: im.pidgin.soc.2010.icq-tlc + +Modified files: + libpurple/protocols/oscar/oscar.c + +ChangeLog: + +Two small fixes to improve sending/receiving HTML-formatted messages +over ICQ. + * Treat all incoming messages as HTML because a) this is what the official + client does and b) we don't have a reliable way to check if a message is + HTML anyway. + * Wrap outgoing HTML in proper HTML tags to make ICQ6 happy. +This was tested with ICQ 6/7, Miranda, Trillian, QIP, and iChat. + +============================================================ +--- libpurple/protocols/oscar/oscar.c ec79d8d9fcba376be091b363977e8f23c748eff2 ++++ libpurple/protocols/oscar/oscar.c f60533d05cd497bf87168ca7e6f259539ce18fd8 +@@ -2486,32 +2486,6 @@ static int incomingim_chan1(OscarData *o + tmp = g_string_free(message, FALSE); + + /* +- * If the message is from an ICQ user and to an ICQ user then escape any HTML, +- * because HTML is not sent over ICQ as a means to format a message. +- * So any HTML we receive is intended to be displayed. Also, \r\n must be +- * replaced with
+- * +- * Note: There *may* be some clients which send messages as HTML formatted - +- * they need to be special-cased somehow. +- * +- * Update: Newer ICQ clients have started sending IMs as HTML. We can +- * distinguish HTML IMs from non-HTML IMs by looking at the features. If +- * the features are "0x 01 06" then the message is plain text. If the +- * features are "0x 01" then the message is HTML. +- */ +- if (od->icq && oscar_util_valid_name_icq(userinfo->bn) +- && (args->featureslen != 1 || args->features[0] != 0x01)) +- { +- /* being recevied by ICQ from ICQ - escape HTML so it is displayed as sent */ +- gchar *tmp2 = g_markup_escape_text(tmp, -1); +- g_free(tmp); +- tmp = tmp2; +- tmp2 = purple_strreplace(tmp, "\r\n", "
"); +- g_free(tmp); +- tmp = tmp2; +- } +- +- /* + * Convert iChat color tags to normal font tags. + */ + if (purple_markup_find_tag("body", tmp, &start, &end, &attribs)) +@@ -4787,7 +4761,8 @@ oscar_send_im(PurpleConnection *gc, cons + tmp2 = purple_markup_strip_html(tmp1); + is_html = FALSE; + } else { +- tmp2 = g_strdup(tmp1); ++ /* ICQ 6 wants its HTML wrapped in these tags. Oblige it. */ ++ tmp2 = g_strdup_printf("%s", tmp1); + is_html = TRUE; + } + g_free(tmp1); diff --git a/pidgin-2.7.0-nulldref-592750.patch b/pidgin-2.7.0-nulldref-592750.patch new file mode 100644 index 0000000..605187b --- /dev/null +++ b/pidgin-2.7.0-nulldref-592750.patch @@ -0,0 +1,30 @@ +----------------------------------------------------------------- +Revision: 13fbe0815f84d5b3c001947559f5818c10275f4c +Ancestor: cfe0e649dda34d9252d40d8f67e445336a247998 +Author: nosnilmot@pidgin.im +Date: 05/17/2010 01:11:01 AM +Branch: im.pidgin.pidgin + +Modified files: + pidgin/gtkblist.c + +ChangeLog: + +Prevent a null pointer dereference in chat_account_filter_func() if called +on a disconnected or disconnecting account. +This should fix https://bugzilla.redhat.com/show_bug.cgi?id=592750 + + +============================================================ +--- pidgin/gtkblist.c 59572bc5415328dec42852173febb8e6d216f911 ++++ pidgin/gtkblist.c cbe664829ff51113e1fda2ec2c6f1791a3b46c47 +@@ -942,6 +942,9 @@ chat_account_filter_func(PurpleAccount * + PurpleConnection *gc = purple_account_get_connection(account); + PurplePluginProtocolInfo *prpl_info = NULL; + ++ if (gc == NULL) ++ return FALSE; ++ + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + + return (prpl_info->chat_info != NULL); diff --git a/pidgin-2.7.0-oscarcrash.patch b/pidgin-2.7.0-oscarcrash.patch new file mode 100644 index 0000000..89220da --- /dev/null +++ b/pidgin-2.7.0-oscarcrash.patch @@ -0,0 +1,48 @@ +----------------------------------------------------------------- +Revision: e3dd36706068f3b8eabd630ff71d270c145cce42 +Ancestor: 6c2368ad4315c5277c41916c2be642f8aa1894e2 +Author: markdoliner@pidgin.im +Date: 05/20/2010 02:39:25 AM +Branch: im.pidgin.pidgin + +Modified files: + libpurple/protocols/oscar/family_icbm.c + +ChangeLog: + +If we get an error SNAC on the ICBM family and it's missing buddy name then +don't fallthrough to the default error handler in misc.c. This was causing +purple_parse_msgerr() in oscar.c to get called with different va_args than +it was expecting, which caused a crash. Specifically when trying to fetch +the ICQ x-status of an offline buddy. + +Fixes #11863. This is nosnilmot's patch, I believe. I had no part in it, +other than verifying that I do believe it'll fix the crash. + +============================================================ +--- libpurple/protocols/oscar/family_icbm.c fcbebddf7bb56d37e2e89ffa10da1b73e63cf833 ++++ libpurple/protocols/oscar/family_icbm.c 62126e23e6971a85d9b599c7ca61675a008e6f9b +@@ -166,20 +166,20 @@ error(OscarData *od, FlapConnection *con + + if (!(snac2 = aim_remsnac(od, snac->id))) { + purple_debug_misc("oscar", "icbm error: received response from unknown request!\n"); +- return 0; ++ return 1; + } + + if (snac2->family != SNAC_FAMILY_ICBM) { + purple_debug_misc("oscar", "icbm error: received response from invalid request! %d\n", snac2->family); + g_free(snac2->data); + g_free(snac2); +- return 0; ++ return 1; + } + + if (!(bn = snac2->data)) { + purple_debug_misc("oscar", "icbm error: received response from request without a buddy name!\n"); + g_free(snac2); +- return 0; ++ return 1; + } + + reason = byte_stream_get16(bs); diff --git a/pidgin-2.7.0-trayblink-11855.patch b/pidgin-2.7.0-trayblink-11855.patch new file mode 100644 index 0000000..c986aba --- /dev/null +++ b/pidgin-2.7.0-trayblink-11855.patch @@ -0,0 +1,30 @@ +----------------------------------------------------------------- +Revision: c4a874926d07b8597db4b78a181a89cf720a8418 +Ancestor: dcd1194eb2bd80a296737c518ce2474661d9fa1f +Author: darkrain42@pidgin.im +Date: 05/16/2010 04:50:23 PM +Branch: im.pidgin.pidgin + +Modified files: + ChangeLog pidgin/gtkdocklet-gtk.c + +ChangeLog: + +pidgin: Add charkins's patch for gtkstatusicon blinking. Fixes #11855 + +============================================================ +--- pidgin/gtkdocklet-gtk.c 621886961dfcbcd728e875983d4e131264731683 ++++ pidgin/gtkdocklet-gtk.c 4c8694f749bba34ea1eda230978b1173e7353de6 +@@ -75,6 +75,12 @@ docklet_gtk_status_update_icon(PurpleSta + if (icon_name) { + gtk_status_icon_set_from_icon_name(docklet, icon_name); + } ++ ++ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")) { ++ gtk_status_icon_set_blinking(docklet, (pending && !connecting)); ++ } else if (gtk_status_icon_get_blinking(docklet)) { ++ gtk_status_icon_set_blinking(docklet, FALSE); ++ } + } + + static void diff --git a/pidgin-2.7.0-yahooraces.patch b/pidgin-2.7.0-yahooraces.patch new file mode 100644 index 0000000..da4b026 --- /dev/null +++ b/pidgin-2.7.0-yahooraces.patch @@ -0,0 +1,148 @@ +----------------------------------------------------------------- +Revision: cfe0e649dda34d9252d40d8f67e445336a247998 +Ancestor: c22043ed4b564d247db393d18a3de8df21981254 +Author: darkrain42@pidgin.im +Date: 05/16/2010 09:56:47 PM +Branch: im.pidgin.pidgin + +Modified files: + libpurple/protocols/yahoo/libymsg.c + +ChangeLog: + +yahoo: Fix a few race-condition crashes at login + +(if the account disconnects while these fetches are in-progress). + +============================================================ +--- libpurple/protocols/yahoo/libymsg.c 53134e145a6dee215c5559bd5a0478c93ddcb901 ++++ libpurple/protocols/yahoo/libymsg.c a78b9b5fa500695a7250aa0b14f0f20273471b2c +@@ -1787,23 +1787,17 @@ static gchar *yahoo_auth16_get_cookie_b( + return tmp2; + } + +-static void yahoo_auth16_stage2(PurpleUtilFetchUrlData *unused, gpointer user_data, const gchar *ret_data, size_t len, const gchar *error_message) ++static void yahoo_auth16_stage2(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *ret_data, size_t len, const gchar *error_message) + { + struct yahoo_auth_data *auth_data = user_data; + PurpleConnection *gc = auth_data->gc; +- YahooData *yd; ++ YahooData *yd = purple_connection_get_protocol_data(gc); + gboolean try_login_on_error = FALSE; + + purple_debug_info("yahoo","Authentication: In yahoo_auth16_stage2\n"); + +- if (!PURPLE_CONNECTION_IS_VALID(gc)) { +- g_free(auth_data->seed); +- g_free(auth_data); +- g_return_if_reached(); +- } +- +- yd = (YahooData *)gc->proto_data; +- ++ yd->url_datas = g_slist_remove(yd->url_datas, url_data); ++ + if (error_message != NULL) { + purple_debug_error("yahoo", "Login Failed, unable to retrieve stage 2 url: %s\n", error_message); + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_message); +@@ -1910,18 +1904,15 @@ static void yahoo_auth16_stage2(PurpleUt + g_free(auth_data); + } + +-static void yahoo_auth16_stage1_cb(PurpleUtilFetchUrlData *unused, gpointer user_data, const gchar *ret_data, size_t len, const gchar *error_message) ++static void yahoo_auth16_stage1_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *ret_data, size_t len, const gchar *error_message) + { + struct yahoo_auth_data *auth_data = user_data; + PurpleConnection *gc = auth_data->gc; ++ YahooData *yd = purple_connection_get_protocol_data(gc); + + purple_debug_info("yahoo","Authentication: In yahoo_auth16_stage1_cb\n"); + +- if (!PURPLE_CONNECTION_IS_VALID(gc)) { +- g_free(auth_data->seed); +- g_free(auth_data); +- g_return_if_reached(); +- } ++ yd->url_datas = g_slist_remove(yd->url_datas, url_data); + + if (error_message != NULL) { + purple_debug_error("yahoo", "Login Failed, unable to retrieve login url: %s\n", error_message); +@@ -2023,6 +2014,8 @@ static void yahoo_auth16_stage1_cb(Purpl + url_data = purple_util_fetch_url_request_len_with_account( + proxy_ssl ? account : NULL, url, TRUE, YAHOO_CLIENT_USERAGENT, + TRUE, NULL, TRUE, -1, yahoo_auth16_stage2, auth_data); ++ if (url_data) ++ yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + g_free(url); + g_free(token); + } +@@ -2031,6 +2024,7 @@ static void yahoo_auth16_stage1(PurpleCo + + static void yahoo_auth16_stage1(PurpleConnection *gc, const char *seed) + { ++ YahooData *yd = purple_connection_get_protocol_data(gc); + PurpleAccount *account = purple_connection_get_account(gc); + PurpleUtilFetchUrlData *url_data = NULL; + struct yahoo_auth_data *auth_data = NULL; +@@ -2062,6 +2056,8 @@ static void yahoo_auth16_stage1(PurpleCo + proxy_ssl ? account : NULL, url, TRUE, + YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, -1, + yahoo_auth16_stage1_cb, auth_data); ++ if (url_data) ++ yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + + g_free(url); + } +@@ -3600,6 +3596,8 @@ static void yahoo_got_pager_server(Purpl + gchar **strings = NULL, *cs_server = NULL; + int port = 0, stringslen = 0; + ++ yd->url_datas = g_slist_remove(yd->url_datas, url_data); ++ + if(error_message != NULL || len == 0) { + purple_debug_error("yahoo", "Unable to retrieve server info. %" + G_GSIZE_FORMAT " bytes retrieved with error message: %s\n", len, +@@ -3646,6 +3644,7 @@ void yahoo_login(PurpleAccount *account) + YahooData *yd = gc->proto_data = g_new0(YahooData, 1); + PurpleStatus *status = purple_account_get_active_status(account); + gboolean use_whole_url = yahoo_account_use_http_proxy(gc); ++ PurpleUtilFetchUrlData *url_data; + + gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC; + +@@ -3678,12 +3677,14 @@ void yahoo_login(PurpleAccount *account) + + /* Get the pager server. Actually start connecting in the callback since we + * must have the contents of the HTTP response to proceed. */ +- purple_util_fetch_url_request_len_with_account( ++ url_data = purple_util_fetch_url_request_len_with_account( + purple_connection_get_account(gc), + yd->jp ? YAHOOJP_PAGER_HOST_REQ_URL : YAHOO_PAGER_HOST_REQ_URL, + use_whole_url ? TRUE : FALSE, + YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, -1, + yahoo_got_pager_server, yd); ++ if (url_data) ++ yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + + return; + } +@@ -4373,6 +4374,8 @@ static void yahoo_get_sms_carrier_cb(Pur + PurpleAccount *account = purple_connection_get_account(gc); + PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, sms_cb_data->who, account); + ++ yd->url_datas = g_slist_remove(yd->url_datas, url_data); ++ + if (error_message != NULL) { + purple_conversation_write(conv, NULL, _("Can't send SMS. Unable to obtain mobile carrier."), PURPLE_MESSAGE_SYSTEM, time(NULL)); + +@@ -4466,7 +4469,9 @@ static void yahoo_get_sms_carrier(Purple + g_free(request); + g_free(validate_request_str); + +- if (!url_data) { ++ if (url_data) ++ yd->url_datas = g_slist_prepend(yd->url_datas, url_data); ++ else { + PurpleAccount *account = purple_connection_get_account(gc); + PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, sms_cb_data->who, account); + purple_conversation_write(conv, NULL, _("Can't send SMS. Unable to obtain mobile carrier."), PURPLE_MESSAGE_SYSTEM, time(NULL)); diff --git a/pidgin.spec b/pidgin.spec index 0ab5e1b..a226c7b 100644 --- a/pidgin.spec +++ b/pidgin.spec @@ -100,7 +100,7 @@ Name: pidgin Version: 2.7.0 -Release: 1%{?dist} +Release: 2%{?dist} License: GPLv2+ and GPLv2 and MIT # GPLv2+ - libpurple, gnt, finch, pidgin, most prpls # GPLv2 - silc & novell prpls @@ -133,6 +133,12 @@ Patch0: pidgin-NOT-UPSTREAM-2.5.2-rhel4-sound-migration.patch ## Patches 100+: To be Included in Future Upstream Patch100: pidgin-2.7.0-msn-slp-11532.patch +Patch101: pidgin-2.7.0-icqhtml.patch +Patch102: pidgin-2.7.0-nulldref-592750.patch +Patch103: pidgin-2.7.0-trayblink-11855.patch +Patch104: pidgin-2.7.0-yahooraces.patch +Patch105: pidgin-2.7.0-oscarcrash.patch +Patch106: pidgin-2.7.0-chatfilter.patch BuildRoot: %{_tmppath}/%{name}-%{version}-root Summary: A Gtk+ based multiprotocol instant messaging client @@ -402,7 +408,13 @@ echo "FEDORA=%{fedora} RHEL=%{rhel}" %endif ## Patches 100+: To be Included in Future Upstream -%patch100 -p0 +%patch100 -p0 -b .msnslp +%patch101 -p0 -b .icqhtml +%patch102 -p0 -b .nulldref +%patch103 -p0 -b .trayblink +%patch104 -p0 -b .yahooraces +%patch105 -p0 -b .oscarcrash +%patch106 -p0 -b .chatfilter # Our preferences cp %{SOURCE1} prefs.xml @@ -662,7 +674,16 @@ rm -rf $RPM_BUILD_ROOT %endif %changelog -* Thu May 13 2010 Stu Tomlinson 2.7.0-1 +* Thu May 20 2010 Stu Tomlinson 2.7.0-2 +- Upstream backports: + 3c30f64efedafc379b6536852bbb3b6ef5f1f6c9 - fix for receiving HTML on ICQ + 13fbe0815f84d5b3c001947559f5818c10275f4c - prevent null deref on disconnecting account (#592750) + c4a874926d07b8597db4b78a181a89cf720a8418 - fix blinking tray icon on new message (#592691) + cfe0e649dda34d9252d40d8f67e445336a247998 - prevent race condition on Yahoo! login + e3dd36706068f3b8eabd630ff71d270c145cce42 - fix crash in Oscar (#548128) + 13fbe0815f84d5b3c001947559f5818c10275f4c - fix crash during network disconnect (#592750) + +* Thu May 13 2010 Stu Tomlinson - 2.7.0-1 - 2.7.0 with features, bug fixes and a security fix: CVE-2010-1624 (#591806) - Use System SSL Certificates (#576721) - Add additional dependencies for Voice + Video (#581343)