comparison mcabber/mcabber/xmpp.c @ 1917:33d1c42cf07e

Ignore malformed caps packets Sometimes buggy caps data have no "ver" attribute (reported by Hermitifier). This is invalid valid, so let's ignore it.
author Mikael Berthe <mikael@lilotux.net>
date Tue, 09 Nov 2010 11:10:26 +0100
parents baa52ea32b47
children bfa507815e0c
comparison
equal deleted inserted replaced
1916:a87ac75872fe 1917:33d1c42cf07e
1440 // XEP-0115 Entity Capabilities 1440 // XEP-0115 Entity Capabilities
1441 caps = lm_message_node_find_xmlns(m->node, NS_CAPS); 1441 caps = lm_message_node_find_xmlns(m->node, NS_CAPS);
1442 if (caps && ust != offline) { 1442 if (caps && ust != offline) {
1443 const char *ver = lm_message_node_get_attribute(caps, "ver"); 1443 const char *ver = lm_message_node_get_attribute(caps, "ver");
1444 GSList *sl_buddy = NULL; 1444 GSList *sl_buddy = NULL;
1445
1446 if (!ver) {
1447 scr_LogPrint(LPRINT_LOGNORM, "Error: malformed caps version (%s)", bjid);
1448 goto handle_presence_return;
1449 }
1450
1445 if (rname) 1451 if (rname)
1446 sl_buddy = roster_find(bjid, jidsearch, ROSTER_TYPE_USER); 1452 sl_buddy = roster_find(bjid, jidsearch, ROSTER_TYPE_USER);
1447 // Only cache the caps if the user is on the roster 1453 // Only cache the caps if the user is on the roster
1448 if (sl_buddy && buddy_getonserverflag(sl_buddy->data)) { 1454 if (sl_buddy && buddy_getonserverflag(sl_buddy->data)) {
1449 buddy_resource_setcaps(sl_buddy->data, rname, ver); 1455 buddy_resource_setcaps(sl_buddy->data, rname, ver);
1468 lm_message_handler_unref(handler); 1474 lm_message_handler_unref(handler);
1469 } 1475 }
1470 } 1476 }
1471 } 1477 }
1472 1478
1479 handle_presence_return:
1473 g_free(bjid); 1480 g_free(bjid);
1474 return LM_HANDLER_RESULT_REMOVE_MESSAGE; 1481 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
1475 } 1482 }
1476 1483
1477 1484