Mercurial > ~mikael > mcabber > hg
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 |