Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/slpmsg_part.c @ 31768:8cf9270acf4c
Add a maximum length when parsing the P2P wire data.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Thu, 10 Mar 2011 05:00:17 +0000 |
parents | 9562a7baa9e4 |
children | eb1bbaae3427 |
comparison
equal
deleted
inserted
replaced
31767:a01d958f7b26 | 31768:8cf9270acf4c |
---|---|
32 { | 32 { |
33 MsnSlpMessagePart *part; | 33 MsnSlpMessagePart *part; |
34 | 34 |
35 part = g_new0(MsnSlpMessagePart, 1); | 35 part = g_new0(MsnSlpMessagePart, 1); |
36 | 36 |
37 if (info) | 37 part->info = info; |
38 part->info = msn_p2p_info_dup(info); | |
39 | 38 |
40 part->ack_cb = msn_slpmsgpart_ack; | 39 part->ack_cb = msn_slpmsgpart_ack; |
41 part->nak_cb = msn_slpmsgpart_nak; | 40 part->nak_cb = msn_slpmsgpart_nak; |
42 | 41 |
43 return msn_slpmsgpart_ref(part); | 42 return msn_slpmsgpart_ref(part); |
44 } | 43 } |
45 | 44 |
46 MsnSlpMessagePart *msn_slpmsgpart_new_from_data(const char *data, size_t data_len) | 45 MsnSlpMessagePart *msn_slpmsgpart_new_from_data(const char *data, size_t data_len) |
47 { | 46 { |
48 MsnSlpMessagePart *part; | 47 MsnSlpMessagePart *part; |
48 MsnP2PInfo *info; | |
49 size_t len; | 49 size_t len; |
50 int body_len; | 50 int body_len; |
51 | 51 |
52 if (data_len < P2P_PACKET_HEADER_SIZE) { | 52 info = msn_p2p_info_new(MSN_P2P_VERSION_ONE); |
53 | |
54 /* Extract the binary SLP header */ | |
55 len = msn_p2p_header_from_wire(info, data, data_len); | |
56 if (len == 0) { | |
57 msn_p2p_info_free(info); | |
53 return NULL; | 58 return NULL; |
54 } | 59 } |
55 | |
56 part = msn_slpmsgpart_new(NULL); | |
57 part->info = msn_p2p_info_new(MSN_P2P_VERSION_ONE); | |
58 | |
59 /* Extract the binary SLP header */ | |
60 len = msn_p2p_header_from_wire(part->info, data); | |
61 data += len; | 60 data += len; |
61 part = msn_slpmsgpart_new(info); | |
62 | 62 |
63 /* Extract the body */ | 63 /* Extract the body */ |
64 body_len = data_len - len - P2P_PACKET_FOOTER_SIZE; | 64 body_len = data_len - len - P2P_PACKET_FOOTER_SIZE; |
65 /* msg->body_len = msg->msnslp_header.length; */ | 65 /* msg->body_len = msg->msnslp_header.length; */ |
66 | 66 |