diff options
-rw-r--r-- | libpurple/protocols/jabber/caps.c | 15 | ||||
-rw-r--r-- | libpurple/protocols/jabber/caps.h | 11 | ||||
-rw-r--r-- | libpurple/tests/Makefile.am | 1 | ||||
-rw-r--r-- | libpurple/tests/check_libpurple.c | 1 | ||||
-rw-r--r-- | libpurple/tests/test_jabber_caps.c | 36 | ||||
-rw-r--r-- | libpurple/tests/tests.h | 1 |
6 files changed, 54 insertions, 11 deletions
diff --git a/libpurple/protocols/jabber/caps.c b/libpurple/protocols/jabber/caps.c index 60a06130eb..3cc39c7552 100644 --- a/libpurple/protocols/jabber/caps.c +++ b/libpurple/protocols/jabber/caps.c @@ -41,14 +41,6 @@ static GHashTable *capstable = NULL; /* JabberCapsTuple -> JabberCapsClientInfo static GHashTable *nodetable = NULL; /* char *node -> JabberCapsNodeExts */ static guint save_timer = 0; -/** - * Processes a query-node and returns a JabberCapsClientInfo object with all relevant info. - * - * @param query A query object. - * @return A JabberCapsClientInfo object. - */ -static JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query); - /* Free a GList of allocated char* */ static void free_string_glist(GList *list) @@ -764,13 +756,14 @@ jabber_xdata_compare(gconstpointer a, gconstpointer b) return result; } -static JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query) +JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query) { xmlnode *child; JabberCapsClientInfo *info; - if (!query || strcmp(query->xmlns, NS_DISCO_INFO)) - return 0; + if (!query || !g_str_equal(query->name, "query") || + !purple_strequal(query->xmlns, NS_DISCO_INFO)) + return NULL; info = g_new0(JabberCapsClientInfo, 1); diff --git a/libpurple/protocols/jabber/caps.h b/libpurple/protocols/jabber/caps.h index 46a6dd770e..897754f6d9 100644 --- a/libpurple/protocols/jabber/caps.h +++ b/libpurple/protocols/jabber/caps.h @@ -115,4 +115,15 @@ const gchar* jabber_caps_get_own_hash(JabberStream *js); */ void jabber_caps_broadcast_change(void); +/** + * Parse the <query/> element from an IQ stanza into a JabberCapsClientInfo + * struct. + * + * Exposed for tests + * + * @param query The 'query' element from an IQ reply stanza. + * @returns A JabberCapsClientInfo struct, or NULL on error + */ +JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query); + #endif /* PURPLE_JABBER_CAPS_H_ */ diff --git a/libpurple/tests/Makefile.am b/libpurple/tests/Makefile.am index 1e48399821..ac1423ac79 100644 --- a/libpurple/tests/Makefile.am +++ b/libpurple/tests/Makefile.am @@ -10,6 +10,7 @@ check_libpurple_SOURCES=\ check_libpurple.c \ tests.h \ test_cipher.c \ + test_jabber_caps.c \ test_jabber_jutil.c \ test_jabber_scram.c \ test_qq.c \ diff --git a/libpurple/tests/check_libpurple.c b/libpurple/tests/check_libpurple.c index a6afa7d043..836b0dfa9c 100644 --- a/libpurple/tests/check_libpurple.c +++ b/libpurple/tests/check_libpurple.c @@ -84,6 +84,7 @@ int main(void) sr = srunner_create (master_suite()); srunner_add_suite(sr, cipher_suite()); + srunner_add_suite(sr, jabber_caps_suite()); srunner_add_suite(sr, jabber_jutil_suite()); srunner_add_suite(sr, jabber_scram_suite()); srunner_add_suite(sr, qq_suite()); diff --git a/libpurple/tests/test_jabber_caps.c b/libpurple/tests/test_jabber_caps.c new file mode 100644 index 0000000000..811c7c6840 --- /dev/null +++ b/libpurple/tests/test_jabber_caps.c @@ -0,0 +1,36 @@ +#include <string.h> + +#include "tests.h" +#include "../xmlnode.h" +#include "../protocols/jabber/caps.h" + +START_TEST(test_parse_invalid) +{ + xmlnode *query; + + fail_unless(NULL == jabber_caps_parse_client_info(NULL)); + + /* Something other than a disco#info query */ + query = xmlnode_new("foo"); + fail_unless(NULL == jabber_caps_parse_client_info(query)); + xmlnode_free(query); + + query = xmlnode_new("query"); + fail_unless(NULL == jabber_caps_parse_client_info(query)); + xmlnode_set_namespace(query, "jabber:iq:last"); + fail_unless(NULL == jabber_caps_parse_client_info(query)); + xmlnode_free(query); +} +END_TEST + +Suite * +jabber_caps_suite(void) +{ + Suite *s = suite_create("Jabber Caps Functions"); + + TCase *tc = tcase_create("Parsing invalid ndoes"); + tcase_add_test(tc, test_parse_invalid); + suite_add_tcase(s, tc); + + return s; +} diff --git a/libpurple/tests/tests.h b/libpurple/tests/tests.h index 40ba1864c8..d3cbdb2c37 100644 --- a/libpurple/tests/tests.h +++ b/libpurple/tests/tests.h @@ -9,6 +9,7 @@ /* remember to add the suite to the runner in check_libpurple.c */ Suite * master_suite(void); Suite * cipher_suite(void); +Suite * jabber_caps_suite(void); Suite * jabber_jutil_suite(void); Suite * jabber_scram_suite(void); Suite * qq_suite(void); |