# HG changeset patch # User Sadrul Habib Chowdhury # Date 1247254189 0 # Node ID 048550ab13a44c2fd320b2753b7e55299379c6d4 # Parent 07d09a987b86a62b2a24eb164e4e049ccb3dda36# Parent 3599729ce9ce99b3d7bb70e9d4ae47eca7da2f3f merge of 'c79c76ef54b9b6ee38720172c7cc655dcee22893' and 'ce52a4af6787aad5221596cca9b17c86441bad96' diff -r 07d09a987b86 -r 048550ab13a4 libpurple/protocols/jabber/jutil.c --- a/libpurple/protocols/jabber/jutil.c Fri Jul 10 15:18:09 2009 +0000 +++ b/libpurple/protocols/jabber/jutil.c Fri Jul 10 19:29:49 2009 +0000 @@ -105,8 +105,7 @@ { const char *at = NULL; const char *slash = NULL; - const char *cur; - gunichar c; + const char *c; gboolean needs_validation = FALSE; #if 0 gboolean node_is_required = FALSE; @@ -118,48 +117,47 @@ if (!str) return NULL; - for (cur = str; *cur != '\0'; cur = g_utf8_next_char(cur)) + for (c = str; *c != '\0'; c++) { - c = g_utf8_get_char(cur); - switch (c) { + switch (*c) { case '@': if (!slash) { if (at) { /* Multiple @'s in the node/domain portion, not a valid JID! */ return NULL; } - if (cur == str) { + if (c == str) { /* JIDs cannot start with @ */ return NULL; } - if ((g_utf8_next_char(cur))[0] == '\0') { + if (c[1] == '\0') { /* JIDs cannot end with @ */ return NULL; } - at = cur; + at = c; } break; case '/': if (!slash) { - if (cur == str) { + if (c == str) { /* JIDs cannot start with / */ return NULL; } - if ((g_utf8_next_char(cur))[0] == '\0') { + if (c[1] == '\0') { /* JIDs cannot end with / */ return NULL; } - slash = cur; + slash = c; } break; default: /* characters allowed everywhere */ - if ((c > 'a' && c < 'z') - || (c > '0' && c < '9') - || (c > 'A' && c < 'Z') - || c == '.' || c == '-') + if ((*c > 'a' && *c < 'z') + || (*c > '0' && *c < '9') + || (*c > 'A' && *c < 'Z') + || *c == '.' || *c == '-') /* We're good */ break; diff -r 07d09a987b86 -r 048550ab13a4 libpurple/tests/test_jabber_jutil.c --- a/libpurple/tests/test_jabber_jutil.c Fri Jul 10 15:18:09 2009 +0000 +++ b/libpurple/tests/test_jabber_jutil.c Fri Jul 10 19:29:49 2009 +0000 @@ -91,6 +91,9 @@ assert_valid_jid("mark.doliner@gmail.com/Test12345"); assert_valid_jid("mark.doliner@gmail.com/Test@12345"); assert_valid_jid("mark.doliner@gmail.com/Te/st@12@//345"); + assert_valid_jid("わいど@conference.jabber.org"); + assert_valid_jid("まりるーむ@conference.jabber.org"); + assert_valid_jid("mark.doliner@gmail.com/まりるーむ"); assert_invalid_jid("@gmail.com"); assert_invalid_jid("@@gmail.com"); @@ -100,6 +103,11 @@ assert_invalid_jid("/Test@12345"); assert_invalid_jid("mark.doliner@"); assert_invalid_jid("mark.doliner/"); + assert_valid_jid("mark.doliner@gmail_stuff.org"); + assert_valid_jid("mark.doliner@gmail[stuff.org"); + assert_valid_jid("mark.doliner@gmail/stuff.org"); + assert_valid_jid("mark.doliner@gmail\\stuff.org"); + assert_valid_jid("mark.doliner@わいど.org"); } END_TEST