Updated purple_mime_document_parsen patch
[siplcs.git] / contrib / media-patches / purple_mime_document_parsen.patch
blob0533d508ec1bfbe189e4b7fe09bc5634142baea9
1 --- a/libpurple/mime.c
2 +++ b/libpurple/mime.c
3 @@ -436,6 +436,33 @@
4 g_free(bnd);
7 +static char *
8 +parse_boundary(const char* ct)
9 +{
10 + const char BOUNDARY[] = "boundary=";
11 + char *boundary_begin = g_strstr_len(ct, -1, BOUNDARY);
12 + char *boundary_end;
14 + if (!boundary_begin)
15 + return NULL;
17 + boundary_begin += sizeof(BOUNDARY) - 1;
19 + if (*boundary_begin == '"') {
20 + boundary_end = strchr(++boundary_begin, '"');
21 + if (!boundary_end)
22 + return NULL;
23 + } else {
24 + boundary_end = strchr(boundary_begin, ' ');
25 + if (!boundary_end) {
26 + boundary_end = strchr(boundary_begin, ';');
27 + if (!boundary_end)
28 + boundary_end = boundary_begin + strlen(boundary_begin);
29 + }
30 + }
32 + return g_strndup(boundary_begin, boundary_end - boundary_begin);
35 PurpleMimeDocument *
36 purple_mime_document_parsen(const char *buf, gsize len)
37 @@ -457,9 +484,10 @@
39 const char *ct = fields_get(&doc->fields, "content-type");
40 if(ct && purple_str_has_prefix(ct, "multipart")) {
41 - char *bd = strrchr(ct, '=');
42 - if(bd++) {
43 + char *bd = parse_boundary(ct);
44 + if(bd) {
45 doc_parts_load(doc, bd, b, n);
46 + g_free(bd);