1 /* UTF-8 decoding tests */
3 #include "silcincludes.h"
5 #define utf8fail(n, data, len) \
6 const unsigned char u##n[] = (data); \
11 if (!silc_utf8_valid(u##n, u##n##l)) \
12 SILC_LOG_DEBUG(("%d: not valid UTF-8, correctly detected, no error", n)); \
14 SILC_LOG_DEBUG(("%d: parser did not detect malformed UTF-8, error", n)); \
19 /* UTF-8 Test vectors that MUST fail */
20 utf8fail(1, "\x80", 1);
21 utf8fail(2, "\xbf", 1);
22 utf8fail(3, "\xfe", 1);
23 utf8fail(4, "\xff", 1);
24 utf8fail(5, "\xfe\xfe\xff\xff", 4);
25 utf8fail(6, "\xc0\xa0", 2);
26 utf8fail(7, "\xe0\x80\xaf", 3);
27 utf8fail(8, "\xf0\x80\x80\xaf", 4);
28 utf8fail(9, "\xf8\x80\x80\x80\xaf", 5);
29 utf8fail(10, "\xfc\x80\x80\x80\x80\xaf", 6);
30 utf8fail(11, "\xc0\x80", 2);
31 utf8fail(12, "\xe0\x80\x80", 3);
32 utf8fail(13, "\xf0\x80\x80\x80", 4);
33 utf8fail(14, "\xf8\x80\x80\x80\x80", 5);
34 utf8fail(15, "\xfc\x80\x80\x80\x80\x80", 6);
35 utf8fail(16, "\xc1\xbf", 2);
36 utf8fail(17, "\xe0\x9f\xbf", 3);
37 utf8fail(18, "\xf0\x8f\xbf\xbf", 4);
38 utf8fail(19, "\xf8\x87\xbf\xbf\xbf", 5);
39 utf8fail(20, "\xfc\x83\xbf\xbf\xbf\xbf", 6);
40 utf8fail(21, "\xed\xa0\x80", 3);
41 utf8fail(22, "\xed\xad\xbf", 3);
42 utf8fail(23, "\xed\xae\x80", 3);
43 utf8fail(24, "\xed\xaf\xbf", 3);
44 utf8fail(25, "\xed\xb0\x80", 3);
45 utf8fail(26, "\xed\xbe\x80", 3);
46 utf8fail(27, "\xed\xbf\xbf", 3);
47 utf8fail(28, "\xfc\x20\xfd\x20", 4);
48 utf8fail(29, "\xf8\xf9\xfa\xfb", 4);
49 utf8fail(30, "\xf0\x20\xf9\x20\xfa\x20\xfb\x20", 8);
51 int main(int argc, char **argv)
54 unsigned char *s1, *s2, *s3, *s4;
57 while ((opt = getopt(argc, argv, "hVd")) != EOF) {
60 printf("usage: test_silcstrutil\n");
64 printf("Secure Internet Live Conferencing\n");
69 silc_debug_hexdump = TRUE;
71 silc_log_set_debug_string(optarg);
73 silc_log_set_debug_string("*strutil*");
82 utf8failc(1); utf8failc(2);
83 utf8failc(3); utf8failc(4);
84 utf8failc(5); utf8failc(6);
85 utf8failc(7); utf8failc(8);
86 utf8failc(9); utf8failc(10);
87 utf8failc(11); utf8failc(12);
88 utf8failc(13); utf8failc(14);
89 utf8failc(15); utf8failc(16);
90 utf8failc(17); utf8failc(18);
91 utf8failc(19); utf8failc(20);
92 utf8failc(21); utf8failc(22);
93 utf8failc(23); utf8failc(24);
94 utf8failc(25); utf8failc(26);
95 utf8failc(27); utf8failc(28);
96 utf8failc(29); utf8failc(30);
98 /* LDAP DN simple test */
99 s1 = "#&?*Pekka, \\Riikonen, <foobar@foobar.com>\xc4\x8d\\ ";
100 SILC_LOG_DEBUG(("s1 = %s", s1));
103 l = silc_utf8_decoded_len(s1, strlen(s1), SILC_STRING_LDAP_DN);
106 s3 = silc_calloc(l + 1, sizeof(*s3));
107 silc_utf8_decode(s1, strlen(s1), SILC_STRING_LDAP_DN, s3, l);
108 SILC_LOG_DEBUG(("ldapdn = %s", s3));
111 l = silc_utf8_encoded_len(s3, strlen(s3), SILC_STRING_LDAP_DN);
114 s4 = silc_calloc(l + 1, sizeof(*s4));
115 silc_utf8_encode(s3, strlen(s3), SILC_STRING_LDAP_DN, s4, l);
116 SILC_LOG_DEBUG(("utf8 = %s", s4));
118 if (memcmp(s4, s1, strlen(s4))) {
119 SILC_LOG_DEBUG(("UTF-8 mismatch"));
125 /* UTF-8 strcasecmp test */
126 SILC_LOG_DEBUG(("silc_utf8_strcasecmp test"));
127 s1 = "Päivää vuan Yrjö";
128 s2 = "PÄIVÄÄ VUAN YRJÖ";
129 l = silc_utf8_encoded_len(s1, strlen(s1), SILC_STRING_LOCALE);
132 s3 = silc_calloc(l + 1, sizeof(*s3));
133 silc_utf8_encode(s1, strlen(s1), SILC_STRING_LOCALE, s3, l);
135 l = silc_utf8_encoded_len(s2, strlen(s2), SILC_STRING_LOCALE);
138 s4 = silc_calloc(l + 1, sizeof(*s4));
139 silc_utf8_encode(s2, strlen(s2), SILC_STRING_LOCALE, s4, l);
141 SILC_LOG_DEBUG(("%s == %s", s3, s4));
142 if (!silc_utf8_strcasecmp(s3, s4)) {
143 SILC_LOG_DEBUG(("mismatch"));
146 SILC_LOG_DEBUG(("match"));
154 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
155 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");