Mon, 12 Mar 2007 22:58:03 +0000
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
| 5309 | 1 | /** |
|
13628
77a85ddf2205
[gaim-migrate @ 16014]
Evan Schoenberg <evands@pidgin.im>
parents:
12410
diff
changeset
|
2 | * @file msn-utils.c Utility functions |
| 5309 | 3 | * |
| 4 | * gaim | |
| 5 | * | |
|
9198
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
6 | * Gaim is the legal property of its developers, whose names are too numerous |
|
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
7 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
8 | * source distribution. |
|
6701
7e2db9273748
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
6359
diff
changeset
|
9 | * |
| 5309 | 10 | * This program is free software; you can redistribute it and/or modify |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 21 | * along with this program; if not, write to the Free Software | |
| 22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 | */ | |
| 24 | #include "msn.h" | |
|
13628
77a85ddf2205
[gaim-migrate @ 16014]
Evan Schoenberg <evands@pidgin.im>
parents:
12410
diff
changeset
|
25 | #include "msn-utils.h" |
| 5309 | 26 | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
27 | void |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
28 | msn_parse_format(const char *mime, char **pre_ret, char **post_ret) |
| 5309 | 29 | { |
| 30 | char *cur; | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
31 | GString *pre = g_string_new(NULL); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
32 | GString *post = g_string_new(NULL); |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
33 | unsigned int colors[3]; |
| 5309 | 34 | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
35 | if (pre_ret != NULL) *pre_ret = NULL; |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
36 | if (post_ret != NULL) *post_ret = NULL; |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
37 | |
| 5309 | 38 | cur = strstr(mime, "FN="); |
| 39 | ||
| 8518 | 40 | if (cur && (*(cur = cur + 3) != ';')) |
| 41 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
42 | pre = g_string_append(pre, "<FONT FACE=\""); |
| 5309 | 43 | |
| 8518 | 44 | while (*cur && *cur != ';') |
| 45 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
46 | pre = g_string_append_c(pre, *cur); |
| 5309 | 47 | cur++; |
| 48 | } | |
| 49 | ||
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
50 | pre = g_string_append(pre, "\">"); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
51 | post = g_string_prepend(post, "</FONT>"); |
| 5309 | 52 | } |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
53 | |
| 5309 | 54 | cur = strstr(mime, "EF="); |
| 55 | ||
| 8518 | 56 | if (cur && (*(cur = cur + 3) != ';')) |
| 57 | { | |
| 58 | while (*cur && *cur != ';') | |
| 59 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
60 | pre = g_string_append_c(pre, '<'); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
61 | pre = g_string_append_c(pre, *cur); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
62 | pre = g_string_append_c(pre, '>'); |
| 8691 | 63 | post = g_string_prepend_c(post, '>'); |
| 64 | post = g_string_prepend_c(post, *cur); | |
| 65 | post = g_string_prepend_c(post, '/'); | |
| 66 | post = g_string_prepend_c(post, '<'); | |
| 5309 | 67 | cur++; |
| 68 | } | |
| 69 | } | |
| 70 | ||
| 71 | cur = strstr(mime, "CO="); | |
| 72 | ||
| 8518 | 73 | if (cur && (*(cur = cur + 3) != ';')) |
| 74 | { | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
75 | int i; |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
76 | |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
77 | i = sscanf(cur, "%02x%02x%02x;", &colors[0], &colors[1], &colors[2]); |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
78 | |
| 8518 | 79 | if (i > 0) |
| 80 | { | |
| 5309 | 81 | char tag[64]; |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
82 | |
| 8518 | 83 | if (i == 1) |
| 84 | { | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
85 | colors[1] = 0; |
| 8518 | 86 | colors[2] = 0; |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
87 | } |
| 8518 | 88 | else if (i == 2) |
| 89 | { | |
| 90 | unsigned int temp = colors[0]; | |
| 91 | ||
| 92 | colors[0] = colors[1]; | |
| 93 | colors[1] = temp; | |
| 94 | colors[2] = 0; | |
| 95 | } | |
| 96 | else if (i == 3) | |
| 97 | { | |
| 98 | unsigned int temp = colors[2]; | |
| 99 | ||
| 100 | colors[2] = colors[0]; | |
| 101 | colors[0] = temp; | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
102 | } |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
103 | |
| 5309 | 104 | g_snprintf(tag, sizeof(tag), |
| 105 | "<FONT COLOR=\"#%02hhx%02hhx%02hhx\">", | |
| 8518 | 106 | colors[0], colors[1], colors[2]); |
| 107 | ||
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
108 | pre = g_string_append(pre, tag); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
109 | post = g_string_prepend(post, "</FONT>"); |
| 5309 | 110 | } |
| 111 | } | |
| 112 | ||
| 7134 | 113 | cur = g_strdup(gaim_url_decode(pre->str)); |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
114 | g_string_free(pre, TRUE); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
115 | |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
116 | if (pre_ret != NULL) |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
117 | *pre_ret = cur; |
|
6359
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
118 | else |
|
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
119 | g_free(cur); |
| 5309 | 120 | |
| 7134 | 121 | cur = g_strdup(gaim_url_decode(post->str)); |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
122 | g_string_free(post, TRUE); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
123 | |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
124 | if (post_ret != NULL) |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
125 | *post_ret = cur; |
|
6359
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
126 | else |
|
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
127 | g_free(cur); |
| 5309 | 128 | } |
| 8518 | 129 | |
| 130 | /* | |
| 131 | * We need this because we're only supposed to encode spaces in the font | |
| 132 | * names. gaim_url_encode() isn't acceptable. | |
| 133 | */ | |
|
11897
10853b830964
[gaim-migrate @ 14188]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11176
diff
changeset
|
134 | static const char * |
| 8518 | 135 | encode_spaces(const char *str) |
| 136 | { | |
| 137 | static char buf[BUF_LEN]; | |
| 138 | const char *c; | |
| 139 | char *d; | |
| 140 | ||
| 141 | g_return_val_if_fail(str != NULL, NULL); | |
| 142 | ||
| 143 | for (c = str, d = buf; *c != '\0'; c++) | |
| 144 | { | |
| 145 | if (*c == ' ') | |
| 146 | { | |
| 147 | *d++ = '%'; | |
| 148 | *d++ = '2'; | |
| 149 | *d++ = '0'; | |
| 150 | } | |
| 151 | else | |
| 152 | *d++ = *c; | |
| 153 | } | |
| 154 | ||
| 155 | return buf; | |
| 156 | } | |
| 157 | ||
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
158 | /* |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
159 | * Taken from the zephyr plugin. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
160 | * This parses HTML formatting (put out by one of the gtkimhtml widgets |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
161 | * and converts it to msn formatting. It doesn't deal with the tag closing, |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
162 | * but gtkimhtml widgets give valid html. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
163 | * It currently deals properly with <b>, <u>, <i>, <font face=...>, |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
164 | * <font color=...>. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
165 | * It ignores <font back=...> and <font size=...> |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
166 | */ |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
167 | void |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
168 | msn_import_html(const char *html, char **attributes, char **message) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
169 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
170 | int len, retcount = 0; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
171 | const char *c; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
172 | char *msg; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
173 | char *fontface = NULL; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
174 | char fonteffect[4]; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
175 | char fontcolor[7]; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
176 | |
|
15849
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
177 | gboolean haveBold = FALSE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
178 | gboolean haveItalic = FALSE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
179 | gboolean haveUnderline = FALSE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
180 | gboolean haveStrikethrough = FALSE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
181 | |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
182 | g_return_if_fail(html != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
183 | g_return_if_fail(attributes != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
184 | g_return_if_fail(message != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
185 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
186 | len = strlen(html); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
187 | msg = g_malloc0(len + 1); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
188 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
189 | memset(fontcolor, 0, sizeof(fontcolor)); |
|
10093
e22f76d46b0b
[gaim-migrate @ 11111]
Evan Schoenberg <evands@pidgin.im>
parents:
10041
diff
changeset
|
190 | strcat(fontcolor, "0"); |
|
10041
79adc9cc8e84
[gaim-migrate @ 11000]
Mark Doliner <markdoliner@pidgin.im>
parents:
9331
diff
changeset
|
191 | memset(fonteffect, 0, sizeof(fonteffect)); |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
192 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
193 | for (c = html; *c != '\0';) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
194 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
195 | if (*c == '<') |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
196 | { |
|
8923
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
197 | if (!g_ascii_strncasecmp(c + 1, "br>", 3)) |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
198 | { |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
199 | msg[retcount++] = '\r'; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
200 | msg[retcount++] = '\n'; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
201 | c += 4; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
202 | } |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
203 | else if (!g_ascii_strncasecmp(c + 1, "i>", 2)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
204 | { |
|
15849
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
205 | if ( haveItalic == FALSE ) |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
206 | { |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
207 | strcat(fonteffect, "I"); |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
208 | haveItalic = TRUE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
209 | } |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
210 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
211 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
212 | else if (!g_ascii_strncasecmp(c + 1, "b>", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
213 | { |
|
15849
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
214 | if ( haveBold == FALSE ) |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
215 | { |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
216 | strcat(fonteffect, "B"); |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
217 | haveBold = TRUE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
218 | } |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
219 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
220 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
221 | else if (!g_ascii_strncasecmp(c + 1, "u>", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
222 | { |
|
15849
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
223 | if ( haveUnderline == FALSE ) |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
224 | { |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
225 | strcat(fonteffect, "U"); |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
226 | haveUnderline = TRUE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
227 | } |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
228 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
229 | } |
|
10274
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
230 | else if (!g_ascii_strncasecmp(c + 1, "s>", 2)) |
|
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
231 | { |
|
15849
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
232 | if ( haveStrikethrough == FALSE ) |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
233 | { |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
234 | strcat(fonteffect, "S"); |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
235 | haveStrikethrough = TRUE; |
|
1b4d3c82ad56
Patch from plivesey, submitted in Adium Trac #5753 (http://trac.adiumx.com/ticket/5753), which fixes a memory stomper which occurred if the msn prpl were passed HTML with multiple style tags of the same type. This doesn't happen in pidgin, because the gtkhtml widget knows that msn can only have one all-or-none instance of each style, but libpurple should be able to handle being passed any sort of HTML. This therefore fixes an Adium crash.
Evan Schoenberg <evands@pidgin.im>
parents:
15435
diff
changeset
|
236 | } |
|
10274
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
237 | c += 3; |
|
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
238 | } |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
239 | else if (!g_ascii_strncasecmp(c + 1, "a href=\"", 8)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
240 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
241 | c += 9; |
|
10274
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
242 | |
| 9331 | 243 | if (!g_ascii_strncasecmp(c, "mailto:", 7)) |
| 244 | c += 7; | |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
245 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
246 | while ((*c != '\0') && g_ascii_strncasecmp(c, "\">", 2)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
247 | msg[retcount++] = *c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
248 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
249 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
250 | c += 2; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
251 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
252 | /* ignore descriptive string */ |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
253 | while ((*c != '\0') && g_ascii_strncasecmp(c, "</a>", 4)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
254 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
255 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
256 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
257 | c += 4; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
258 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
259 | else if (!g_ascii_strncasecmp(c + 1, "font", 4)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
260 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
261 | c += 5; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
262 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
263 | while ((*c != '\0') && !g_ascii_strncasecmp(c, " ", 1)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
264 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
265 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
266 | if (!g_ascii_strncasecmp(c, "color=\"#", 7)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
267 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
268 | c += 8; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
269 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
270 | fontcolor[0] = *(c + 4); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
271 | fontcolor[1] = *(c + 5); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
272 | fontcolor[2] = *(c + 2); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
273 | fontcolor[3] = *(c + 3); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
274 | fontcolor[4] = *c; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
275 | fontcolor[5] = *(c + 1); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
276 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
277 | c += 8; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
278 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
279 | else if (!g_ascii_strncasecmp(c, "face=\"", 6)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
280 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
281 | const char *end = NULL; |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
282 | const char *comma = NULL; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
283 | unsigned int namelen = 0; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
284 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
285 | c += 6; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
286 | end = strchr(c, '\"'); |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
287 | comma = strchr(c, ','); |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
288 | |
|
9090
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
289 | if (comma == NULL || comma > end) |
|
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
290 | namelen = (unsigned int)(end - c); |
|
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
291 | else |
|
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
292 | namelen = (unsigned int)(comma - c); |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
293 | |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
294 | fontface = g_strndup(c, namelen); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
295 | c = end + 2; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
296 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
297 | else |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
298 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
299 | /* Drop all unrecognized/misparsed font tags */ |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
300 | while ((*c != '\0') && g_ascii_strncasecmp(c, "\">", 2)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
301 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
302 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
303 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
304 | c += 2; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
305 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
306 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
307 | else |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
308 | { |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
309 | while ((*c != '\0') && (*c != '>')) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
310 | c++; |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
311 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
312 | c++; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
313 | } |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
314 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
315 | else if (*c == '&') |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
316 | { |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
317 | if (!g_ascii_strncasecmp(c, "<", 4)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
318 | { |
| 8678 | 319 | msg[retcount++] = '<'; |
| 320 | c += 4; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
321 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
322 | else if (!g_ascii_strncasecmp(c, ">", 4)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
323 | { |
| 8678 | 324 | msg[retcount++] = '>'; |
| 325 | c += 4; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
326 | } |
|
9264
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
327 | else if (!g_ascii_strncasecmp(c, " ", 6)) |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
328 | { |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
329 | msg[retcount++] = ' '; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
330 | c += 6; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
331 | } |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
332 | else if (!g_ascii_strncasecmp(c, """, 6)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
333 | { |
| 8678 | 334 | msg[retcount++] = '"'; |
| 335 | c += 6; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
336 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
337 | else if (!g_ascii_strncasecmp(c, "&", 5)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
338 | { |
| 8678 | 339 | msg[retcount++] = '&'; |
| 340 | c += 5; | |
| 341 | } | |
|
9264
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
342 | else if (!g_ascii_strncasecmp(c, "'", 6)) |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
343 | { |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
344 | msg[retcount++] = '\''; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
345 | c += 6; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
346 | } |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
347 | else |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
348 | msg[retcount++] = *c++; |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
349 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
350 | else |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
351 | msg[retcount++] = *c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
352 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
353 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
354 | if (fontface == NULL) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
355 | fontface = g_strdup("MS Sans Serif"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
356 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
357 | *attributes = g_strdup_printf("FN=%s; EF=%s; CO=%s; PF=0", |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
358 | encode_spaces(fontface), |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
359 | fonteffect, fontcolor); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
360 | *message = g_strdup(msg); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
361 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
362 | g_free(fontface); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
363 | g_free(msg); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
364 | } |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
365 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
366 | void |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
367 | msn_parse_socket(const char *str, char **ret_host, int *ret_port) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
368 | { |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
369 | char *host; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
370 | char *c; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
371 | int port; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
372 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
373 | host = g_strdup(str); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
374 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
375 | if ((c = strchr(host, ':')) != NULL) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
376 | { |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
377 | *c = '\0'; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
378 | port = atoi(c + 1); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
379 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
380 | else |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
381 | port = 1863; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
382 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
383 | *ret_host = host; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
384 | *ret_port = port; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
385 | } |