Mercurial > pidgin
annotate libpurple/tests/test_jabber_jutil.c @ 32797:aacfb71133cc
Fix a possible MSN remote crash
Incoming messages with certain characters or character encodings
can cause clients to crash. The fix is for the contents of all
incoming plaintext messages are converted to UTF-8 and validated
before used.
This was reported to us by Fabian Yamaguchi and this patch was written
by Elliott Sales de Andrade (maybe with small, insignificant changes by me)
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 07 May 2012 03:18:08 +0000 |
parents | aea409195613 |
children |
rev | line source |
---|---|
15888
6577b292e7b4
Fix compiler warnings and errors in tests resulting from using DEBUG_CFLAGS
Stu Tomlinson <stu@nosnilmot.com>
parents:
15373
diff
changeset
|
1 #include <string.h> |
6577b292e7b4
Fix compiler warnings and errors in tests resulting from using DEBUG_CFLAGS
Stu Tomlinson <stu@nosnilmot.com>
parents:
15373
diff
changeset
|
2 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 #include "tests.h" |
15890
5bd5af818afe
Update #includes to match changes in jabber
Stu Tomlinson <stu@nosnilmot.com>
parents:
15888
diff
changeset
|
4 #include "../account.h" |
5bd5af818afe
Update #includes to match changes in jabber
Stu Tomlinson <stu@nosnilmot.com>
parents:
15888
diff
changeset
|
5 #include "../conversation.h" |
5bd5af818afe
Update #includes to match changes in jabber
Stu Tomlinson <stu@nosnilmot.com>
parents:
15888
diff
changeset
|
6 #include "../xmlnode.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
7 #include "../protocols/jabber/jutil.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
8 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
9 START_TEST(test_get_resource) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
10 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
11 assert_string_equal_free("baz", jabber_get_resource("foo@bar/baz")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 assert_string_equal_free("baz", jabber_get_resource("bar/baz")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 assert_string_equal_free("baz/bat", jabber_get_resource("foo@bar/baz/bat")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
14 assert_string_equal_free("baz/bat", jabber_get_resource("bar/baz/bat")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
15 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
16 END_TEST |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
18 START_TEST(test_get_resource_no_resource) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
19 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
20 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 fail_unless(NULL == jabber_get_resource("foo@bar")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
22 fail_unless(NULL == jabber_get_resource("bar")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
23 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
24 END_TEST |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
25 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
26 START_TEST(test_get_bare_jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
27 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
28 assert_string_equal_free("foo@bar", jabber_get_bare_jid("foo@bar")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 assert_string_equal_free("foo@bar", jabber_get_bare_jid("foo@bar/baz")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
30 assert_string_equal_free("bar", jabber_get_bare_jid("bar")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
31 assert_string_equal_free("bar", jabber_get_bare_jid("bar/baz")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
32 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 END_TEST |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
34 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
35 START_TEST(test_nodeprep_validate) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
36 { |
15888
6577b292e7b4
Fix compiler warnings and errors in tests resulting from using DEBUG_CFLAGS
Stu Tomlinson <stu@nosnilmot.com>
parents:
15373
diff
changeset
|
37 char *longnode; |
6577b292e7b4
Fix compiler warnings and errors in tests resulting from using DEBUG_CFLAGS
Stu Tomlinson <stu@nosnilmot.com>
parents:
15373
diff
changeset
|
38 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
39 fail_unless(jabber_nodeprep_validate(NULL)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
40 fail_unless(jabber_nodeprep_validate("foo")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
41 fail_unless(jabber_nodeprep_validate("%d")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
42 fail_unless(jabber_nodeprep_validate("y\\z")); |
28593
aea409195613
'=' and ',' are valid nodeprep characters
Paul Aurich <paul@darkrain42.org>
parents:
28407
diff
changeset
|
43 fail_unless(jabber_nodeprep_validate("a=")); |
aea409195613
'=' and ',' are valid nodeprep characters
Paul Aurich <paul@darkrain42.org>
parents:
28407
diff
changeset
|
44 fail_unless(jabber_nodeprep_validate("a,")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
45 |
15888
6577b292e7b4
Fix compiler warnings and errors in tests resulting from using DEBUG_CFLAGS
Stu Tomlinson <stu@nosnilmot.com>
parents:
15373
diff
changeset
|
46 longnode = g_strnfill(1023, 'a'); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
47 fail_unless(jabber_nodeprep_validate(longnode)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
48 g_free(longnode); |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
49 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
50 longnode = g_strnfill(1024, 'a'); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
51 fail_if(jabber_nodeprep_validate(longnode)); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
52 g_free(longnode); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
53 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
54 END_TEST |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
55 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
56 START_TEST(test_nodeprep_validate_illegal_chars) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
57 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
58 fail_if(jabber_nodeprep_validate("don't")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
59 fail_if(jabber_nodeprep_validate("m@ke")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
60 fail_if(jabber_nodeprep_validate("\"me\"")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
61 fail_if(jabber_nodeprep_validate("&ngry")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
62 fail_if(jabber_nodeprep_validate("c:")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
63 fail_if(jabber_nodeprep_validate("a/b")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
64 fail_if(jabber_nodeprep_validate("4>2")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
65 fail_if(jabber_nodeprep_validate("4<7")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
66 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
67 END_TEST |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
68 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
69 START_TEST(test_nodeprep_validate_too_long) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
70 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
71 char *longnode = g_strnfill(1024, 'a'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
72 fail_if(jabber_nodeprep_validate(longnode)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
73 g_free(longnode); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
74 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
75 END_TEST |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
76 |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
77 #define assert_valid_jid(str) { \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
78 JabberID *jid = jabber_id_new(str); \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
79 fail_if(jid == NULL, "JID '%s' is valid but jabber_id_new() rejected it", str); \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
80 jabber_id_free(jid); \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
81 } |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
82 |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
83 #define assert_invalid_jid(str) { \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
84 JabberID *jid = jabber_id_new(str); \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
85 fail_if(jid != NULL, "JID '%s' is invalid but jabber_id_new() allowed it", str); \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
86 jabber_id_free(jid); \ |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
87 } |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
88 |
27560
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
89 #define assert_jid_parts(expect_node, expect_domain, str) { \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
90 JabberID *jid = jabber_id_new(str); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
91 fail_if(jid == NULL, "JID '%s' is valid but jabber_id_new() rejected it", str); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
92 fail_if(jid->node == NULL, "JID '%s' is valid but jabber_id_new() didn't return a node", str); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
93 fail_if(jid->domain == NULL, "JID '%s' is valid but jabber_id_new() didn't return a domain", str); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
94 fail_if(jid->resource != NULL, "JID '%s' doesn't contain a resource", str); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
95 assert_string_equal(expect_node, jid->node); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
96 assert_string_equal(expect_domain, jid->domain); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
97 jabber_id_free(jid); \ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
98 } |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
99 |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
100 START_TEST(test_jabber_id_new) |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
101 { |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
102 assert_valid_jid("gmail.com"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
103 assert_valid_jid("gmail.com/Test"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
104 assert_valid_jid("gmail.com/Test@"); |
27453 | 105 assert_valid_jid("gmail.com/@"); |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
106 assert_valid_jid("gmail.com/Test@alkjaweflkj"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
107 assert_valid_jid("mark.doliner@gmail.com"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
108 assert_valid_jid("mark.doliner@gmail.com/Test12345"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
109 assert_valid_jid("mark.doliner@gmail.com/Test@12345"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
110 assert_valid_jid("mark.doliner@gmail.com/Te/st@12@//345"); |
27457
3599729ce9ce
More tests, some with an international flavor. I have no idea what that
Mark Doliner <mark@kingant.net>
parents:
27453
diff
changeset
|
111 assert_valid_jid("わいど@conference.jabber.org"); |
3599729ce9ce
More tests, some with an international flavor. I have no idea what that
Mark Doliner <mark@kingant.net>
parents:
27453
diff
changeset
|
112 assert_valid_jid("まりるーむ@conference.jabber.org"); |
3599729ce9ce
More tests, some with an international flavor. I have no idea what that
Mark Doliner <mark@kingant.net>
parents:
27453
diff
changeset
|
113 assert_valid_jid("mark.doliner@gmail.com/まりるーむ"); |
27459
91fefa830798
Whoops, some of these were asserting valid but should have been
Mark Doliner <mark@kingant.net>
parents:
27457
diff
changeset
|
114 assert_valid_jid("mark.doliner@gmail/stuff.org"); |
27463
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27459
diff
changeset
|
115 assert_valid_jid("stuart@nödåtXäYZ.se"); |
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27459
diff
changeset
|
116 assert_valid_jid("stuart@nödåtXäYZ.se/まりるーむ"); |
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27459
diff
changeset
|
117 assert_valid_jid("mark.doliner@わいど.org"); |
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27459
diff
changeset
|
118 assert_valid_jid("nick@まつ.おおかみ.net"); |
27464
da3d0159333d
XMPP domains can also be IPv4 or IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
27463
diff
changeset
|
119 assert_valid_jid("paul@10.0.42.230/s"); |
da3d0159333d
XMPP domains can also be IPv4 or IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
27463
diff
changeset
|
120 assert_valid_jid("paul@[::1]"); /* IPv6 */ |
da3d0159333d
XMPP domains can also be IPv4 or IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
27463
diff
changeset
|
121 assert_valid_jid("paul@[2001:470:1f05:d58::2]"); |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
122 assert_valid_jid("paul@[2001:470:1f05:d58::2]/foo"); |
28593
aea409195613
'=' and ',' are valid nodeprep characters
Paul Aurich <paul@darkrain42.org>
parents:
28407
diff
changeset
|
123 assert_valid_jid("pa=ul@10.0.42.230"); |
aea409195613
'=' and ',' are valid nodeprep characters
Paul Aurich <paul@darkrain42.org>
parents:
28407
diff
changeset
|
124 assert_valid_jid("pa,ul@10.0.42.230"); |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
125 |
27453 | 126 assert_invalid_jid("@gmail.com"); |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
127 assert_invalid_jid("@@gmail.com"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
128 assert_invalid_jid("mark.doliner@@gmail.com/Test12345"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
129 assert_invalid_jid("mark@doliner@gmail.com/Test12345"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
130 assert_invalid_jid("@gmail.com/Test@12345"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
131 assert_invalid_jid("/Test@12345"); |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
132 assert_invalid_jid("mark.doliner@"); |
27452
2131abd387f9
I thought of another invalid JID. I'm changing jabber_id_new() so that all
Mark Doliner <mark@kingant.net>
parents:
27451
diff
changeset
|
133 assert_invalid_jid("mark.doliner/"); |
27459
91fefa830798
Whoops, some of these were asserting valid but should have been
Mark Doliner <mark@kingant.net>
parents:
27457
diff
changeset
|
134 assert_invalid_jid("mark.doliner@gmail_stuff.org"); |
91fefa830798
Whoops, some of these were asserting valid but should have been
Mark Doliner <mark@kingant.net>
parents:
27457
diff
changeset
|
135 assert_invalid_jid("mark.doliner@gmail[stuff.org"); |
91fefa830798
Whoops, some of these were asserting valid but should have been
Mark Doliner <mark@kingant.net>
parents:
27457
diff
changeset
|
136 assert_invalid_jid("mark.doliner@gmail\\stuff.org"); |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
137 assert_invalid_jid("paul@[::1]124"); |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
138 assert_invalid_jid("paul@2[::1]124/as"); |
28252
4cb882afbd6f
Fix a crash when attempting to validate a JID with an invalid resource.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
139 assert_invalid_jid("paul@まつ.おおかみ/\x01"); |
27560
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
140 |
28407
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
141 /* |
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
142 * RFC 3454 Section 6 reads, in part, |
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
143 * "If a string contains any RandALCat character, the |
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
144 * string MUST NOT contain any LCat character." |
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
145 * The character is U+066D (ARABIC FIVE POINTED STAR). |
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
146 */ |
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
147 assert_invalid_jid("foo@example.com/٭simplexe٭"); |
aba0ab6b4abd
Add another (IMHO unintuitive) JID test. Refs #10532.
Paul Aurich <paul@darkrain42.org>
parents:
28278
diff
changeset
|
148 |
27560
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
149 /* Ensure that jabber_id_new is properly lowercasing node and domains */ |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
150 assert_jid_parts("paul", "darkrain42.org", "PaUL@darkrain42.org"); |
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
151 assert_jid_parts("paul", "darkrain42.org", "paul@DaRkRaIn42.org"); |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
152 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
153 /* These case-mapping tests culled from examining RFC3454 B.2 */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
154 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
155 /* Cyrillic capital EF (U+0424) maps to lowercase EF (U+0444) */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
156 assert_jid_parts("ф", "darkrain42.org", "Ф@darkrain42.org"); |
28278
c9ec54c0add1
Just comment out the failing tests when using glib; it's not likely anyone
Paul Aurich <paul@darkrain42.org>
parents:
28274
diff
changeset
|
157 |
c9ec54c0add1
Just comment out the failing tests when using glib; it's not likely anyone
Paul Aurich <paul@darkrain42.org>
parents:
28274
diff
changeset
|
158 #ifdef USE_IDN |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
159 /* |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
160 * These character (U+A664 and U+A665) are not mapped to anything in |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
161 * RFC3454 B.2. This first test *fails* when not using IDN because glib's |
28274
60a790b93a50
Clarify the "improperly"; glib is doing what I'd expect strdown to do.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
162 * case-folding/utf8_strdown improperly (for XMPP) lowercases the character. |
28278
c9ec54c0add1
Just comment out the failing tests when using glib; it's not likely anyone
Paul Aurich <paul@darkrain42.org>
parents:
28274
diff
changeset
|
163 * |
c9ec54c0add1
Just comment out the failing tests when using glib; it's not likely anyone
Paul Aurich <paul@darkrain42.org>
parents:
28274
diff
changeset
|
164 * This is known, but not (very?) likely to actually cause a problem, so |
c9ec54c0add1
Just comment out the failing tests when using glib; it's not likely anyone
Paul Aurich <paul@darkrain42.org>
parents:
28274
diff
changeset
|
165 * this test is commented out when using glib's functions. |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
166 */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
167 assert_jid_parts("Ꙥ", "darkrain42.org", "Ꙥ@darkrain42.org"); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
168 assert_jid_parts("ꙥ", "darkrain42.org", "ꙥ@darkrain42.org"); |
28278
c9ec54c0add1
Just comment out the failing tests when using glib; it's not likely anyone
Paul Aurich <paul@darkrain42.org>
parents:
28274
diff
changeset
|
169 #endif |
c9ec54c0add1
Just comment out the failing tests when using glib; it's not likely anyone
Paul Aurich <paul@darkrain42.org>
parents:
28274
diff
changeset
|
170 |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27560
diff
changeset
|
171 /* U+04E9 to U+04E9 */ |
27560
090dc513552f
Ensure UTF-8 strdown is mostly working correctly.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
172 assert_jid_parts("paul", "өarkrain42.org", "paul@Өarkrain42.org"); |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
173 } |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
174 END_TEST |
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
175 |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
176 START_TEST(test_jabber_normalize) |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
177 { |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
178 assert_string_equal("paul@darkrain42.org", jabber_normalize(NULL, "PaUL@DaRkRain42.org")); |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
179 assert_string_equal("paul@darkrain42.org", jabber_normalize(NULL, "PaUL@DaRkRain42.org/")); |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
180 assert_string_equal("paul@darkrain42.org", jabber_normalize(NULL, "PaUL@DaRkRain42.org/resource")); |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
181 } |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
182 END_TEST |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
183 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
184 Suite * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
185 jabber_jutil_suite(void) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
186 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
187 Suite *s = suite_create("Jabber Utility Functions"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
188 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
189 TCase *tc = tcase_create("Get Resource"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
190 tcase_add_test(tc, test_get_resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
191 tcase_add_test(tc, test_get_resource_no_resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
192 suite_add_tcase(s, tc); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
193 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
194 tc = tcase_create("Get Bare JID"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
195 tcase_add_test(tc, test_get_bare_jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
196 suite_add_tcase(s, tc); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
197 |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
198 tc = tcase_create("JID validate"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
199 tcase_add_test(tc, test_nodeprep_validate); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
200 tcase_add_test(tc, test_nodeprep_validate_illegal_chars); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
201 tcase_add_test(tc, test_nodeprep_validate_too_long); |
27451
962ce369fc35
Add tests for jabber_id_new(). Please add to this! JIDs with accented
Mark Doliner <mark@kingant.net>
parents:
15890
diff
changeset
|
202 tcase_add_test(tc, test_jabber_id_new); |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
27598
diff
changeset
|
203 tcase_add_test(tc, test_jabber_normalize); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
204 suite_add_tcase(s, tc); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
205 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
206 return s; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
207 } |