Mercurial > pidgin.yaz
changeset 28749:5550823608cb
merge of '5fc198b7a02aacaaa8a7045d9df437c2d0e9006b'
and '667654b3309008b53bf4d9df02bd401d1ede8db5'
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Tue, 13 Oct 2009 19:52:35 +0000 |
parents | e191f5fedce1 (diff) f55bd60e2738 (current diff) |
children | 912b9999bbe6 ef513141e960 7c346c5a05d4 |
files | ChangeLog |
diffstat | 2 files changed, 31 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Oct 12 22:19:48 2009 +0000 +++ b/ChangeLog Tue Oct 13 19:52:35 2009 +0000 @@ -7,9 +7,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 @@ -26,6 +24,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
--- a/libpurple/dnssrv.c Mon Oct 12 22:19:48 2009 +0000 +++ b/libpurple/dnssrv.c Tue Oct 13 19:52:35 2009 +0000 @@ -361,8 +361,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); @@ -429,21 +433,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); @@ -788,6 +809,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");