# HG changeset patch # User John Bailey # Date 1255603522 0 # Node ID fd2afe1b2d3ca74a98265f5f12ca587f7ca478db # Parent 29e96fb6cff3fdc7c740b7b816cd0b1a980ce708# Parent ecd2136ff8181200ea5309c55bae3b5a48f7250b propagate from branch 'im.pidgin.pidgin' (head af00ae634db8d99b296a90e1e0777bd23bd4df6a) to branch 'im.pidgin.pidgin.next.minor' (head fa239a2e49b49a05b3c8612ea2e2580e7286ac63) diff -r ecd2136ff818 -r fd2afe1b2d3c COPYRIGHT --- a/COPYRIGHT Tue Oct 13 22:13:57 2009 +0000 +++ b/COPYRIGHT Thu Oct 15 10:45:22 2009 +0000 @@ -406,11 +406,10 @@ Carsten Schaar Toby Schaffer Jonathan Schleifer -Matteo Settenvini -Colin Seymour Luke Schierer Ralph Schmieder David Schmitt +Heiko Schmitt Mark Schneider Evan Schoenberg Gabriel Schulhof @@ -420,6 +419,8 @@ Peter Seebach Don Seiler Leonardo Serra +Matteo Settenvini +Colin Seymour Jim Seymour Javeed Shaikh Joe Shaw diff -r ecd2136ff818 -r fd2afe1b2d3c ChangeLog --- a/ChangeLog Tue Oct 13 22:13:57 2009 +0000 +++ b/ChangeLog Thu Oct 15 10:45:22 2009 +0000 @@ -20,9 +20,7 @@ * Fix a crash when performing DNS queries on Unixes that use the blocking DNS lookups. (Brian Lu) * Fix building the GnuTLS plugin with older versions of GnuTLS. - - MSN: - * Don't forget display names for buddies. + * Fix DNS TXT query resolution. XMPP: * Users connecting to Google Talk now have an "Initiate Chat" context menu @@ -39,6 +37,7 @@ * Add support for adding OCS and Sametime buddies. OCS users are added as "ocs/user@domain.tld" and Sametime users are added as "ibm/sametime_id". (Jason Cohen) + Finch: * The TinyURL plugin now creates shorter URLs for long non-conversation URLs, e.g. URLs to open Inbox in Yahoo/MSN protocols, or the Yahoo @@ -46,7 +45,7 @@ Pidgin: * The userlist in a multiuser chat can be styled via gtkrc by using the - widget name "pidgin_conv_userlist". + widget name "pidgin_conv_userlist". (Heiko Schmitt) version 2.6.2 (09/05/2009): libpurple: diff -r ecd2136ff818 -r fd2afe1b2d3c libpurple/dnssrv.c --- a/libpurple/dnssrv.c Tue Oct 13 22:13:57 2009 +0000 +++ b/libpurple/dnssrv.c Thu Oct 15 10:45:22 2009 +0000 @@ -363,8 +363,12 @@ /* TODO: Check return value */ if (query.type == T_SRV) write(out, ret->data, sizeof(PurpleSrvResponse)); - if (query.type == T_TXT) - write(out, ret->data, sizeof(PurpleTxtResponse)); + if (query.type == T_TXT) { + PurpleTxtResponse *response = ret->data; + gsize l = strlen(response->content) + 1 /* null byte */; + write(out, &l, sizeof(l)); + write(out, response->content, l); + } g_free(ret->data); ret = g_list_remove(ret, ret->data); @@ -431,21 +435,38 @@ PurpleTxtCallback cb = query_data->cb.txt; ssize_t red; purple_debug_info("dnssrv","found %d TXT entries\n", size); - res = g_new0(PurpleTxtResponse, 1); for (i = 0; i < size; i++) { - red = read(source, res, sizeof(PurpleTxtResponse)); - if (red != sizeof(PurpleTxtResponse)) { + gsize len; + + red = read(source, &len, sizeof(len)); + if (red != sizeof(len)) { purple_debug_error("dnssrv","unable to read txt " - "response: %s\n", g_strerror(errno)); + "response length: %s\n", g_strerror(errno)); size = 0; - g_free(res); g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); g_list_free(responses); responses = NULL; break; } + + res = g_new0(PurpleTxtResponse, 1); + res->content = g_new0(gchar, len); + + red = read(source, res->content, len); + if (red != len) { + purple_debug_error("dnssrv","unable to read txt " + "response: %s\n", g_strerror(errno)); + size = 0; + purple_txt_response_destroy(res); + g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); + g_list_free(responses); + responses = NULL; + break; + } + responses = g_list_prepend(responses, res); } + responses = g_list_reverse(responses); cb(responses, query_data->extradata); } else { purple_debug_error("dnssrv", "type unknown of DNS result entry; errno is %i\n", errno); @@ -790,6 +811,7 @@ internal_query.type = T_TXT; strncpy(internal_query.query, query, 255); + internal_query.query[255] = '\0'; if (write(in[1], &internal_query, sizeof(internal_query)) < 0) purple_debug_error("dnssrv", "Could not write to TXT resolver\n"); diff -r ecd2136ff818 -r fd2afe1b2d3c libpurple/protocols/yahoo/libymsg.c --- a/libpurple/protocols/yahoo/libymsg.c Tue Oct 13 22:13:57 2009 +0000 +++ b/libpurple/protocols/yahoo/libymsg.c Thu Oct 15 10:45:22 2009 +0000 @@ -1140,10 +1140,12 @@ } } + if(im->fed != YAHOO_FEDERATION_NONE) + g_free(fed_from); + g_free(im); } - if (fed_from != im->from) - g_free(fed_from); + g_slist_free(list); } diff -r ecd2136ff818 -r fd2afe1b2d3c pidgin/gtkutils.c --- a/pidgin/gtkutils.c Tue Oct 13 22:13:57 2009 +0000 +++ b/pidgin/gtkutils.c Thu Oct 15 10:45:22 2009 +0000 @@ -3406,6 +3406,40 @@ return (gnome_url_handlers != NULL); } +#ifdef _WIN32 +static void +winpidgin_register_win32_url_handlers(void) +{ + int idx = 0; + LONG ret = ERROR_SUCCESS; + + do { + DWORD nameSize = 256; + char protocol[256]; + /* I don't think we need to worry about non-ASCII protocol names */ + ret = RegEnumKeyExA(HKEY_CLASSES_ROOT, idx++, protocol, &nameSize, + NULL, NULL, NULL, NULL); + if (ret == ERROR_SUCCESS) { + HKEY reg_key = NULL; + ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, protocol, 0, KEY_READ, ®_key); + if (ret == ERROR_SUCCESS) { + ret = RegQueryValueExA(reg_key, "URL Protocol", NULL, NULL, NULL, NULL); + if (ret == ERROR_SUCCESS) { + /* We still pass everything to the "http" "open" handler for security reasons */ + gtk_imhtml_class_register_protocol(protocol, url_clicked_cb, link_context_menu); + } + RegCloseKey(reg_key); + } + ret = ERROR_SUCCESS; + } + } while (ret == ERROR_SUCCESS); + + if (ret != ERROR_NO_MORE_ITEMS) + purple_debug_error("winpidgin", "Error iterating HKEY_CLASSES_ROOT subkeys: %ld\n", + ret); +} +#endif + void pidgin_utils_init(void) { gtk_imhtml_class_register_protocol("http://", url_clicked_cb, link_context_menu); @@ -3423,6 +3457,11 @@ /* If we're under GNOME, try registering the system URL handlers. */ if (purple_running_gnome()) register_gnome_url_handlers(); + +#ifdef _WIN32 + winpidgin_register_win32_url_handlers(); +#endif + } void pidgin_utils_uninit(void)