Mercurial > pidgin.yaz
diff libpurple/protocols/jabber/si.c @ 31933:6b3bc0947068
merged from im.pidgin.pidgin
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 21 Apr 2011 20:36:02 +0900 |
parents | 7281d151e492 b671728e6ee9 |
children | 380f530c3f86 |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/si.c Fri Apr 01 13:47:51 2011 +0900 +++ b/libpurple/protocols/jabber/si.c Thu Apr 21 20:36:02 2011 +0900 @@ -279,6 +279,7 @@ if(dstjid != NULL && streamhost->host && streamhost->port > 0) { char *dstaddr, *hash; + PurpleAccount *account; jsx->gpi = purple_proxy_info_new(); purple_proxy_info_set_type(jsx->gpi, PURPLE_PROXY_SOCKS5); purple_proxy_info_set_host(jsx->gpi, streamhost->host); @@ -295,8 +296,9 @@ /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1"); - jsx->connect_data = purple_proxy_connect_socks5(NULL, jsx->gpi, - hash, 0, + account = purple_connection_get_account(jsx->js->gc); + jsx->connect_data = purple_proxy_connect_socks5_account(NULL, account, + jsx->gpi, hash, 0, jabber_si_bytestreams_connect_cb, xfer); g_free(hash); g_free(dstaddr); @@ -1696,6 +1698,7 @@ PurpleXfer *xfer; xmlnode *file, *feature, *x, *field, *option, *value, *thumbnail; const char *stream_id, *filename, *filesize_c, *profile; + guint64 filesize_64 = 0; size_t filesize = 0; if(!(profile = xmlnode_get_attrib(si, "profile")) || @@ -1712,7 +1715,17 @@ return; if((filesize_c = xmlnode_get_attrib(file, "size"))) - filesize = strtoul(filesize_c, NULL, 10); + filesize_64 = g_ascii_strtoull(filesize_c, NULL, 10); + /* TODO 3.0.0: When the core uses a guint64, this is redundant. + * See #8477. + */ + if (filesize_64 > G_MAXSIZE) { + /* Should this pop up a warning? */ + purple_debug_warning("jabber", "Unable to transfer file (too large)" + " -- see #8477 for more details."); + return; + } + filesize = filesize_64; if(!(feature = xmlnode_get_child(si, "feature"))) return;