pidgin: f5fb11c0: XMPP allows for internationalized domain...

darkrain42 at pidgin.im darkrain42 at pidgin.im
Fri Jul 10 22:00:47 EDT 2009


-----------------------------------------------------------------
Revision: f5fb11c018f4f93600f9f9bf28ec9274e43c377d
Ancestor: 74d13e30ade39288f6fefe62085de0b5aaf95772
Author: darkrain42 at pidgin.im
Date: 2009-07-11T00:49:25
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/f5fb11c018f4f93600f9f9bf28ec9274e43c377d

Modified files:
        libpurple/protocols/jabber/jutil.c
        libpurple/tests/test_jabber_jutil.c

ChangeLog: 

XMPP allows for internationalized domain names.

We don't actually support IDNA for connecting (AFAIK),
but we need to be able to receive stanzas from such users.
This check might be overly accepting of some non-ASCII that
wouldn't properly convert according to RFC3490.

See http://xmpp.org/internet-drafts/draft-ietf-xmpp-3920bis-00.html#addressing-domain and http://tools.ietf.org/html/rfc3490


-------------- next part --------------
============================================================
--- libpurple/protocols/jabber/jutil.c	bed5819ef2f175d079fba12a95e9625032cb8cdb
+++ libpurple/protocols/jabber/jutil.c	da14263cc75547fb5e1027b6c07a1bf2907dcbba
@@ -73,11 +73,11 @@ gboolean jabber_nameprep_validate(const 
 	while(c && *c) {
 		gunichar ch = g_utf8_get_char(c);
 		/* The list of characters allowed in domain names is pretty small */
-		if (!( (ch >= 'a' && ch <= 'z')
+		if ((ch <= 0x7F && !( (ch >= 'a' && ch <= 'z')
 				|| (ch >= '0' && ch <= '9')
 				|| (ch >= 'A' && ch <= 'Z')
 				|| ch == '.'
-				|| ch == '-' ))
+				|| ch == '-' )) || (ch >= 0x80 && !g_unichar_isgraph(ch)))
 			return FALSE;
 
 		c = g_utf8_next_char(c);
============================================================
--- libpurple/tests/test_jabber_jutil.c	33e7e819cb2d371175c843ed9303c8d749129d5b
+++ libpurple/tests/test_jabber_jutil.c	66de5c9b6cb7e55901e33e54457eec1865acaf19
@@ -95,6 +95,10 @@ START_TEST(test_jabber_id_new)
 	assert_valid_jid("?????@conference.jabber.org");
 	assert_valid_jid("mark.doliner at gmail.com/?????");
 	assert_valid_jid("mark.doliner at gmail/stuff.org");
+	assert_valid_jid("stuart at n?d?tX?YZ.se");
+	assert_valid_jid("stuart at n?d?tX?YZ.se/?????");
+	assert_valid_jid("mark.doliner@???.org");
+	assert_valid_jid("nick@??.????.net");
 
 	assert_invalid_jid("@gmail.com");
 	assert_invalid_jid("@@gmail.com");
@@ -107,7 +111,6 @@ START_TEST(test_jabber_id_new)
 	assert_invalid_jid("mark.doliner at gmail_stuff.org");
 	assert_invalid_jid("mark.doliner at gmail[stuff.org");
 	assert_invalid_jid("mark.doliner at gmail\\stuff.org");
-	assert_invalid_jid("mark.doliner@???.org");
 }
 END_TEST
 


More information about the Commits mailing list