Mercurial > hg
comparison mcabber/src/jab_iq.c @ 1574:d8a016f76ff7
Fix segfaults when receiving malformed XEP-0146 packets
author | franky@veqlargh.fs |
---|---|
date | Tue, 20 Jan 2009 08:48:11 +0100 |
parents | 3df441efb7c2 |
children | 8e52ce94eee0 |
comparison
equal
deleted
inserted
replaced
1564:4b6cfaa6898b | 1574:d8a016f76ff7 |
---|---|
1191 // priority like gossip and gajim do (misc) | 1191 // priority like gossip and gajim do (misc) |
1192 y = xmlnode_insert_tag(x, "field"); | 1192 y = xmlnode_insert_tag(x, "field"); |
1193 xmlnode_put_attrib(y, "type", "text-multi"); | 1193 xmlnode_put_attrib(y, "type", "text-multi"); |
1194 xmlnode_put_attrib(y, "var", "status-message"); | 1194 xmlnode_put_attrib(y, "var", "status-message"); |
1195 xmlnode_put_attrib(y, "label", "Message"); | 1195 xmlnode_put_attrib(y, "label", "Message"); |
1196 } else if (!strcmp(action, "cancel")) { | 1196 } else if (action && !strcmp(action, "cancel")) { |
1197 xmlnode_put_attrib(command, "status", "canceled"); | 1197 xmlnode_put_attrib(command, "status", "canceled"); |
1198 } else { // (if sessionid and not canceled) | 1198 } else { // (if sessionid and not canceled) |
1199 y = xmlnode_get_tag(x, "x?xmlns=jabber:x:data"); | 1199 y = xmlnode_get_tag(x, "x?xmlns=jabber:x:data"); |
1200 if (y) { | 1200 if (y) { |
1201 char *value, *message; | 1201 char *value, *message; |
1202 value = xmlnode_get_tag_data(xmlnode_get_tag(y, "field?var=status"), | 1202 value = xmlnode_get_tag_data(xmlnode_get_tag(y, "field?var=status"), |
1203 "value"); | 1203 "value"); |
1204 message = xmlnode_get_tag_data(xmlnode_get_tag(y, | 1204 message = xmlnode_get_tag_data(xmlnode_get_tag(y, |
1205 "field?var=status-message"), "value"); | 1205 "field?var=status-message"), "value"); |
1206 for (s = adhoc_status_list; !s->name || strcmp(s->name, value); s++); | 1206 if (value) { |
1207 if (s->name) { | 1207 for (s = adhoc_status_list; s->name && strcmp(s->name, value); s++); |
1208 char *status = g_strdup_printf("%s %s", s->status, | 1208 if (s->name) { |
1209 message ? message : ""); | 1209 char *status = g_strdup_printf("%s %s", s->status, |
1210 cmd_setstatus(NULL, status); | 1210 message ? message : ""); |
1211 g_free(status); | 1211 cmd_setstatus(NULL, status); |
1212 xmlnode_put_attrib(command, "status", "completed"); | 1212 g_free(status); |
1213 xmlnode_put_attrib(iq, "type", "result"); | 1213 xmlnode_put_attrib(command, "status", "completed"); |
1214 xmlnode_insert_dataform_result_message(command, | 1214 xmlnode_put_attrib(iq, "type", "result"); |
1215 "Status has been changed"); | 1215 xmlnode_insert_dataform_result_message(command, |
1216 "Status has been changed"); | |
1217 } | |
1216 } | 1218 } |
1217 } | 1219 } |
1218 } | 1220 } |
1219 if (sessionid) | 1221 if (sessionid) |
1220 xmlnode_put_attrib(command, "sessionid", sessionid); | 1222 xmlnode_put_attrib(command, "sessionid", sessionid); |
1293 xmlnode_put_attrib(field, "var", "groupchats"); | 1295 xmlnode_put_attrib(field, "var", "groupchats"); |
1294 xmlnode_put_attrib(field, "label", "Groupchats: "); | 1296 xmlnode_put_attrib(field, "label", "Groupchats: "); |
1295 xmlnode_insert_tag(field, "required"); | 1297 xmlnode_insert_tag(field, "required"); |
1296 | 1298 |
1297 foreach_buddy(ROSTER_TYPE_ROOM, &_callback_foreach_buddy_groupchat, &field); | 1299 foreach_buddy(ROSTER_TYPE_ROOM, &_callback_foreach_buddy_groupchat, &field); |
1298 } else if (!strcmp(action, "cancel")) { | 1300 } else if (action && !strcmp(action, "cancel")) { |
1299 xmlnode_put_attrib(command, "status", "canceled"); | 1301 xmlnode_put_attrib(command, "status", "canceled"); |
1300 } else { // (if sessionid and not canceled) | 1302 } else { // (if sessionid and not canceled) |
1301 xmlnode form = xmlnode_get_tag(x, "x?xmlns=jabber:x:data"); | 1303 xmlnode form = xmlnode_get_tag(x, "x?xmlns=jabber:x:data"); |
1302 if (form) { | 1304 if (form) { |
1303 xmlnode x, gc; | 1305 xmlnode x, gc; |