# HG changeset patch # User Paul Aurich # Date 1278715757 0 # Node ID 502b9d2f2d7a07f236063e838a7fe83e6825a011 # Parent 6362579b3d2e73e7f1852a0fbd6c8293b8ff51ba jabber: Don't crash on caps that include an empty in the Software Information extended info. Fixes #12292 (The part at fault is ) diff -r 6362579b3d2e -r 502b9d2f2d7a libpurple/protocols/jabber/caps.c --- a/libpurple/protocols/jabber/caps.c Fri Jul 09 22:14:03 2010 +0000 +++ b/libpurple/protocols/jabber/caps.c Fri Jul 09 22:49:17 2010 +0000 @@ -841,9 +841,12 @@ static void append_escaped_string(PurpleCipherContext *context, const gchar *str) { - char *tmp = g_markup_escape_text(str, -1); - purple_cipher_context_append(context, (const guchar *)tmp, strlen(tmp)); - g_free(tmp); + if (str && *str) { + char *tmp = g_markup_escape_text(str, -1); + purple_cipher_context_append(context, (const guchar *)tmp, strlen(tmp)); + g_free(tmp); + } + purple_cipher_context_append(context, (const guchar *)"<", 1); } diff -r 6362579b3d2e -r 502b9d2f2d7a libpurple/tests/test_jabber_caps.c --- a/libpurple/tests/test_jabber_caps.c Fri Jul 09 22:14:03 2010 +0000 +++ b/libpurple/tests/test_jabber_caps.c Fri Jul 09 22:49:17 2010 +0000 @@ -23,6 +23,20 @@ } END_TEST +#define assert_caps_calculate_match(hash_func, hash, str) { \ + xmlnode *query = xmlnode_from_str((str), -1); \ + JabberCapsClientInfo *info = jabber_caps_parse_client_info(query); \ + gchar *got_hash = jabber_caps_calculate_hash(info, (hash_func)); \ + assert_string_equal_free((hash), got_hash); \ +} + +START_TEST(test_calculate_caps) +{ + assert_caps_calculate_match("sha1", "GNjxthSckUNvAIoCCJFttjl6VL8=", + "urn:xmpp:dataforms:softwareinfoTkabber ( 8.5.5 )ATmega640-16AU"); +} +END_TEST + Suite * jabber_caps_suite(void) { @@ -32,5 +46,9 @@ tcase_add_test(tc, test_parse_invalid); suite_add_tcase(s, tc); + tc = tcase_create("Calculating from XMLnode"); + tcase_add_test(tc, test_calculate_caps); + suite_add_tcase(s, tc); + return s; }