summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2010-02-28 04:06:46 +0000
committerElliott Sales de Andrade <qulogic@pidgin.im>2010-02-28 04:06:46 +0000
commitd9d015d4bb28b8d0c14c31a65776ca1239f37d93 (patch)
tree74494838f1b54f510b0e4c789afded4275126162
parent5ff6919005fd1603bca53fc950a9a00b362a410f (diff)
downloadpidgin-d9d015d4bb28b8d0c14c31a65776ca1239f37d93.tar.gz
Fix FT context header length handling. The official client only seems to
care about this value if the version is 3.
-rw-r--r--libpurple/protocols/msn/slp.c4
-rw-r--r--libpurple/protocols/msn/slplink.c2
2 files changed, 3 insertions, 3 deletions
diff --git a/libpurple/protocols/msn/slp.c b/libpurple/protocols/msn/slp.c
index c1a9fe9a7d..b55e48b8e1 100644
--- a/libpurple/protocols/msn/slp.c
+++ b/libpurple/protocols/msn/slp.c
@@ -397,8 +397,8 @@ got_sessionreq(MsnSlpCall *slpcall, const char *branch,
header = (MsnFileContext *)purple_base64_decode(context, &bin_len);
if (bin_len >= sizeof(MsnFileContext) - 1 &&
- header->length == sizeof(MsnFileContext) - 1 &&
- header->version == 2) {
+ (header->version == 2 ||
+ (header->version == 3 && header->length == sizeof(MsnFileContext) + 63))) {
file_size = GUINT64_FROM_LE(header->file_size);
file_name = g_convert((const gchar *)&header->file_name,
diff --git a/libpurple/protocols/msn/slplink.c b/libpurple/protocols/msn/slplink.c
index 60c1308ddb..c00db15d0d 100644
--- a/libpurple/protocols/msn/slplink.c
+++ b/libpurple/protocols/msn/slplink.c
@@ -686,7 +686,7 @@ gen_context(PurpleXfer *xfer, const char *file_name, const char *file_path)
u8 = NULL;
}
- header.length = GUINT32_TO_LE(sizeof(MsnFileContext));
+ header.length = GUINT32_TO_LE(sizeof(MsnFileContext) - 1);
header.version = GUINT32_TO_LE(2); /* V.3 contains additional unnecessary data */
header.file_size = GUINT64_TO_LE(size);
header.type = GUINT32_TO_LE(1); /* No file preview */