]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Handle capability stanzas that fail to provide node or version information
authorMatthew Jordan <mjordan@digium.com>
Sat, 6 Oct 2012 03:20:56 +0000 (03:20 +0000)
committerMatthew Jordan <mjordan@digium.com>
Sat, 6 Oct 2012 03:20:56 +0000 (03:20 +0000)
While XEP-0115 states that the node and ver attributes are both required, some
devices fail to provide either field.  Prior to this patch, failure to provide
the node or ver attribute would cause a crash in res_xmpp.  While failing to
provide the node or ver attribute is technically invalid, since this
information is not utilized by Asterisk except for reporting purposes, for
interoperability reasons, we continue to process the capability stanza anyways.

(closes issue ASTERISK-20495)
Reported by: Martin W
Tested by: Martin W
patches:
  20495.patch uploaded by Martin W (license #6434)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@374622 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_xmpp.c

index 75c20d1c8f891c8dec27cf470d825a5ce72f3302..4f7c3b02fb61303b63cbf8f087f8c71344a1a02a 100644 (file)
@@ -3142,8 +3142,13 @@ static int xmpp_pak_presence(struct ast_xmpp_client *client, struct ast_xmpp_cli
                }
 
                if ((node && strcmp(resource->caps.node, node)) || (ver && strcmp(resource->caps.version, ver))) {
-                       ast_copy_string(resource->caps.node, node, sizeof(resource->caps.node));
-                       ast_copy_string(resource->caps.version, ver, sizeof(resource->caps.version));
+                       /* For interoperability reasons, proceed even if the resource fails to provide node or version */
+                       if (node) {
+                               ast_copy_string(resource->caps.node, node, sizeof(resource->caps.node));
+                       }
+                       if (ver) {
+                               ast_copy_string(resource->caps.version, ver, sizeof(resource->caps.version));
+                       }
 
                        /* Google Talk places the capabilities information directly in presence, so see if it is there */
                        if (iks_find_with_attrib(pak->x, "c", "node", "http://www.google.com/xmpp/client/caps") ||