LCOV - GNU Libidn - tests/tst_idna2.c

LCOV - code coverage report
Current view: top level - tests - tst_idna2.c (source / functions) Hit Total Coverage
Test: GNU Libidn Lines: 17 35 48.6 %
Date: 2020年07月22日 17:53:13 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

 Line data Source code
 1  : /* tst_idna2.c --- Self tests for idna_to_ascii_8z().
 2  : * Copyright (C) 2002-2020 Simon Josefsson
 3  : *
 4  : * This file is part of GNU Libidn.
 5  : *
 6  : * This program is free software: you can redistribute it and/or modify
 7  : * it under the terms of the GNU General Public License as published by
 8  : * the Free Software Foundation, either version 3 of the License, or
 9  : * (at your option) any later version.
 10  : *
 11  : * This program is distributed in the hope that it will be useful,
 12  : * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 14  : * GNU General Public License for more details.
 15  : *
 16  : * You should have received a copy of the GNU General Public License
 17  : * along with this program. If not, see <http://www.gnu.org/licenses/>.
 18  : *
 19  : */
 20  : 
 21  : #ifdef HAVE_CONFIG_H
 22  : # include "config.h"
 23  : #endif
 24  : 
 25  : #include <stdio.h>
 26  : #include <stdlib.h>
 27  : #include <stdarg.h>
 28  : #include <string.h>
 29  : 
 30  : #include <idna.h>
 31  : 
 32  : #include "utils.h"
 33  : 
 34  : struct idna
 35  : {
 36  : const char *in;
 37  : const char *out;
 38  : };
 39  : 
 40  : static const struct idna idna[] = {
 41  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc3\xad\x64\x6e", "example.xn--dn-mja"
 42  : /* 1-1-1 Has an IDN in just the TLD */
 43  : },
 44  : {"\xc3\xab\x78\x2e\xc3\xad\x64\x6e", "xn--x-ega.xn--dn-mja"
 45  : /* 1-1-2 Has an IDN in the TLD and SLD */
 46  : },
 47  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc3\xa5\xc3\xbe\xc3\xa7",
 48  : "example.xn--5cae2e"
 49  : /* 1-2-1 Latin-1 TLD */
 50  : },
 51  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc4\x83\x62\xc4\x89",
 52  : "example.xn--b-rhat"
 53  : /* 1-2-2 Latin Extended A TLD */
 54  : },
 55  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc8\xa7\xc6\x80\xc6\x88",
 56  : "example.xn--lhaq98b"
 57  : /* 1-2-3 Latin Extended B TLD */
 58  : },
 59  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\xb8\x81\xe1\xb8\x83\xe1\xb8\x89",
 60  : "example.xn--2fges"
 61  : /* 1-2-4 Latin Extended Additional TLD */
 62  : },
 63  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe4\xb8\xbf\xe4\xba\xba\xe5\xb0\xb8",
 64  : "example.xn--xiqplj17a"
 65  : /* 1-3-1 Han TLD */
 66  : },
 67  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe3\x81\x8b\xe3\x81\x8c\xe3\x81\x8d",
 68  : "example.xn--u8jcd"
 69  : /* 1-3-2 Hiragana TLD */
 70  : },
 71  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe3\x82\xab\xe3\x82\xac\xe3\x82\xad",
 72  : "example.xn--lckcd"
 73  : /* 1-3-3 Katakana TLD */
 74  : },
 75  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x84\x80\xe1\x85\xa1\xe1\x86\xa8",
 76  : "example.xn--p39a"
 77  : /* 1-3-4 Hangul Jamo TLD */
 78  : /* Don't resolve as example.xn--ypd8qrh */
 79  : },
 80  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xea\xb1\xa9\xeb\x93\x86\xec\x80\xba",
 81  : "example.xn--o69aq2nl0j"
 82  : /* 1-3-5 Hangul TLD */
 83  : },
 84  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xea\x80\x8a\xea\x80\xa0\xea\x8a\xb8",
 85  : "example.xn--6l7arby7j"
 86  : /* 1-3-6 Yi TLD */
 87  : },
 88  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xce\xb1\xce\xb2\xce\xb3",
 89  : "example.xn--mxacd"
 90  : /* 1-3-7 Greek TLD */
 91  : },
 92  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\xbc\x82\xe1\xbc\xa6\xe1\xbd\x95",
 93  : "example.xn--fng7dpg"
 94  : /* 1-3-8 Greek Extended TLD */
 95  : },
 96  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd0\xb0\xd0\xb1\xd0\xb2",
 97  : "example.xn--80acd"
 98  : /* 1-3-9 Cyrillic TLD */
 99  : },
 100  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd5\xa1\xd5\xa2\xd5\xa3",
 101  : "example.xn--y9acd"
 102  : /* 1-3-10 Armeian TLD */
 103  : },
 104  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x83\x90\xe1\x83\x91\xe1\x83\x92",
 105  : "example.xn--lodcd"
 106  : /* 1-3-11 Georgian TLD */
 107  : },
 108  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe2\x88\xa1\xe2\x86\xba\xe2\x8a\x82",
 109  : "example.xn--b7gxomk"
 110  : /* 1-4-1 Symbols TLD */
 111  : },
 112  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xa4\x95\xe0\xa4\x96\xe0\xa4\x97",
 113  : "example.xn--11bcd"
 114  : /* 1-5-1 Devanagari TLD */
 115  : },
 116  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xa6\x95\xe0\xa6\x96\xe0\xa6\x97",
 117  : "example.xn--p5bcd"
 118  : /* 1-5-2 Bengali TLD */
 119  : },
 120  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xa8\x95\xe0\xa8\x96\xe0\xa8\x97",
 121  : "example.xn--d9bcd"
 122  : /* 1-5-3 Gurmukhi TLD */
 123  : },
 124  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xaa\x95\xe0\xaa\x96\xe0\xaa\x97",
 125  : "example.xn--0dccd"
 126  : /* 1-5-4 Gujarati TLD */
 127  : },
 128  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xac\x95\xe0\xac\x96\xe0\xac\x97",
 129  : "example.xn--ohccd"
 130  : /* 1-5-5 Oriya TLD */
 131  : },
 132  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xae\x95\xe0\xae\x99\xe0\xae\x9a",
 133  : "example.xn--clcid"
 134  : /* 1-5-6 Tamil TLD */
 135  : },
 136  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb0\x95\xe0\xb0\x96\xe0\xb0\x97",
 137  : "example.xn--zoccd"
 138  : /* 1-5-7 Telugu TLD */
 139  : },
 140  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb2\x95\xe0\xb2\x96\xe0\xb2\x97",
 141  : "example.xn--nsccd"
 142  : /* 1-5-8 Kannada TLD */
 143  : },
 144  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb4\x95\xe0\xb4\x96\xe0\xb4\x97",
 145  : "example.xn--bwccd"
 146  : /* 1-5-9 Malayalam TLD */
 147  : },
 148  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb6\x9a\xe0\xb6\x9b\xe0\xb6\x9c",
 149  : "example.xn--3zccd"
 150  : /* 1-5-10 Sinhala TLD */
 151  : },
 152  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb8\x81\xe0\xb8\x82\xe0\xb8\x83",
 153  : "example.xn--12ccd"
 154  : /* 1-5-11 Thai TLD */
 155  : },
 156  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xba\x81\xe0\xba\x82\xe0\xba\x84",
 157  : "example.xn--p6ccg"
 158  : /* 1-5-12 Lao TLD */
 159  : },
 160  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xbd\x80\xe0\xbd\x81\xe0\xbd\x82",
 161  : "example.xn--5cdcd"
 162  : /* 1-5-13 Tibetan TLD */
 163  : },
 164  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x80\x80\xe1\x80\x81\xe1\x80\x82",
 165  : "example.xn--nidcd"
 166  : /* 1-5-14 Myanmar TLD */
 167  : },
 168  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x9e\x80\xe1\x9e\x81\xe1\x9e\x82",
 169  : "example.xn--i2ecd"
 170  : /* 1-5-15 Khmer TLD */
 171  : },
 172  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\xa0\xa0\xe1\xa0\xa1\xe1\xa0\xa2",
 173  : "example.xn--26ecd"
 174  : /* 1-5-16 Mongolian TLD */
 175  : },
 176  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd8\xa7\xd8\xa8\xd8\xa9",
 177  : "example.xn--mgbcd"
 178  : /* 1-6-1 Arabic TLD */
 179  : },
 180  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd7\x90\xd7\x91\xd7\x92",
 181  : "example.xn--4dbcd"
 182  : /* 1-6-2 Hebrew TLD */
 183  : },
 184  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xdc\x90\xdc\x91\xdc\x92",
 185  : "example.xn--9mbcd"
 186  : /* 1-6-3 Syriac TLD */
 187  : },
 188  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\x61\x62\x63\xe3\x82\xab\xe3\x82\xac\xe3\x82\xad",
 189  : "example.xn--abc-mj4bfg"
 190  : /* 1-7-1 ASCII and non-Latin TLD */
 191  : },
 192  : {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc3\xa5\xc3\xbe\xc3\xa7\xe3\x82\xab\xe3\x82\xac\xe3\x82\xad",
 193  : "example.xn--5cae2e328wfag"
 194  : /* 1-7-2 Latin (non-ASCII) and non-Latin TLD */
 195  : },
 196  : {"\xc3\xad\x21\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 197  : /* 2-3-1-1 Includes ! before Nameprep */
 198  : /* Don't resolve as xn--!dn-qma.example */
 199  : },
 200  : {"\xc3\xad\x24\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 201  : /* 2-3-1-2 Includes $ before Nameprep */
 202  : /* Don't resolve as xn--$dn-qma.example */
 203  : },
 204  : {"\xc3\xad\x2b\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 205  : /* 2-3-1-3 Includes + before Nameprep */
 206  : /* Don't resolve as xn--+dn-qma.example */
 207  : },
 208  : {"\x2d\xc3\xad\x31\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 209  : /* 2-3-2-1 Leading hyphen before Nameprep */
 210  : /* Don't resolve as xn---1dn-vpa.example */
 211  : },
 212  : {"\xc3\xad\x31\x64\x6e\x2d\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 213  : /* 2-3-2-2 Trailing hyphen before Nameprep */
 214  : /* Don't resolve as xn--1dn--upa.example */
 215  : },
 216  : {"\xc3\xad\xef\xbc\x8b\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 217  : /* 2-3-3-1 Gets a + after Nameprep */
 218  : /* Don't resolve as xn--dn-mja0331x.example */
 219  : },
 220  : {"\xc3\xad\xe2\x81\xbc\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 221  : /* 2-3-3-2 Gets a = after Nameprep */
 222  : /* Don't resolve as xn--dn-mja0343a.example */
 223  : },
 224  : {"\xef\xb9\xa3\xc3\xad\x32\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 225  : /* 2-3-4-1 Leading hyphen after Nameprep */
 226  : /* Don't resolve as xn--2dn-qma32863a.example */
 227  : /* Don't resolve as xn---2dn-vpa.example */
 228  : },
 229  : {"\xc3\xad\x32\x64\x6e\xef\xbc\x8d\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 230  : /* 2-3-4-2 Trailing hyphen after Nameprep */
 231  : /* Don't resolve as xn--2dn-qma79363a.example */
 232  : /* Don't resolve as xn--2dn--upa.example */
 233  : },
 234  : {"\xc2\xb9\x31\x2e\x65\x78\x61\x6d\x70\x6c\x65", "11.example"
 235  : /* 2-4-1 All-ASCII check, Latin */
 236  : },
 237  : {"\xe2\x85\xa5\x76\x69\x2e\x65\x78\x61\x6d\x70\x6c\x65", "vivi.example"
 238  : /* 2-4-2 All-ASCII check, symbol */
 239  : },
 240  : {"\xc3\x9f\x73\x73\x2e\x65\x78\x61\x6d\x70\x6c\x65", "ssss.example"
 241  : /* 2-4-3 All-ASCII check, sharp S */
 242  : },
 243  : {"\x78\x6e\x2d\x2d\xc3\xaf\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 244  : /* 2-5-1 ACE prefix before Nameprep, body */
 245  : /* Don't resolve as xn--xn--dn-sja.example */
 246  : /* Don't resolve as xn--dn-sja.example */
 247  : },
 248  : {"\xe2\x85\xb9\x6e\x2d\x2d\xc3\xa4\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 249  : ""
 250  : /* 2-5-2 ACE prefix before Nameprep, prefix */
 251  : /* Don't resolve as xn--xn--dn-uia.example */
 252  : /* Don't resolve as xn--dn-uia.example */
 253  : },
 254  : {"", ""
 255  : /* 2-8-1 Zero-length label after Nameprep */
 256  : /* Don't resolve as xn--kba.example */
 257  : /* Don't resolve as xn--.example */
 258  : },
 259  : {"\x33\x30\x30\x32\x2d\x74\x65\x73\x74\xe3\x80\x82\xc3\xad\x64\x6e",
 260  : "3002-test.xn--dn-mja"
 261  : /* 2-9-1 U+3002 acts as a label separator */
 262  : /* Don't resolve as xn--3002-testdn-wcb2087m.example */
 263  : },
 264  : {"\x66\x66\x30\x65\x2d\x74\x65\x73\x74\xef\xbc\x8e\xc3\xad\x64\x6e",
 265  : "ff0e-test.xn--dn-mja"
 266  : /* 2-9-2 U+FF0E acts as a label separator */
 267  : /* Don't resolve as xn--ff0e-testdn-wcb45865f.example */
 268  : },
 269  : {"\x66\x66\x36\x31\x2d\x74\x65\x73\x74\xef\xbd\xa1\xc3\xad\x64\x6e",
 270  : "ff61-test.xn--dn-mja"
 271  : /* 2-9-3 U+FF61 acts as a label separator */
 272  : /* Don't resolve as xn--ff61-testdn-wcb33975f.example */
 273  : },
 274  : {"\x30\x30\x61\x64\x6f\x75\x74\xc2\xad\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 275  : "xn--00adoutdn-m5a.example"
 276  : /* 4-1-1-1 00adout<00AD><00ED>dn.example -> 00adout<00ED>dn.example */
 277  : /* Don't resolve as xn--00adoutdn-cna81e.example */
 278  : },
 279  : {"\x32\x30\x30\x64\x6f\x75\x74\xe2\x80\x8d\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 280  : "xn--200doutdn-m5a.example"
 281  : /* 4-1-1-2 200dout<200D><00ED>dn.example -> 200dout<00ED>dn.example */
 282  : /* Don't resolve as xn--200doutdn-m5a1678f.example */
 283  : },
 284  : {"\x73\x69\x6d\x70\x6c\x65\x63\x61\x70\x44\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 285  : "xn--simplecapddn-1fb.example"
 286  : /* 4-1-2-1 simplecap<0044><00ED>dn.example -> simplecap<0064><00ED>dn.example */
 287  : },
 288  : {"\x6c\x61\x74\x69\x6e\x74\x6f\x67\x72\x65\x65\x6b\xc2\xb5\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 289  : "xn--latintogreekdn-cmb716i.example"
 290  : /* 4-1-2-2 latintogreek<00B5><00ED>dn.example -> latintogreek<03BC><00ED>dn.example */
 291  : /* Don't resolve as xn--latintogreekdn-cxa01g.example */
 292  : },
 293  : {"\x6c\x61\x74\x69\x6e\x65\x78\x74\xc3\x87\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 294  : "xn--latinextdn-v6a6e.example"
 295  : /* 4-1-2-3 latinext<00C7><00ED>dn.example -> latinext<00E7><00ED>dn.example */
 296  : /* Don't resolve as xn--latinextdn-twa07b.example */
 297  : },
 298  : {"\x73\x68\x61\x72\x70\x73\xc3\x9f\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 299  : "xn--sharpsssdn-r8a.example"
 300  : /* 4-1-2-4 sharps<00DF><00ED>dn.example -> sharpsss<00ED>dn.example */
 301  : /* Don't resolve as xn--sharpsdn-vya4l.example */
 302  : },
 303  : {"\x74\x75\x72\x6b\x69\x73\x68\x69\xc4\xb0\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 304  : "xn--turkishiidn-wcb701e.example"
 305  : /* 4-1-2-5 turkishi<0130><00ED>dn.example -> turkishi<0069><0307><00ED>dn.example */
 306  : /* Don't resolve as xn--turkishidn-r8a71f.example */
 307  : },
 308  : {"\x65\x78\x70\x74\x77\x6f\xc5\x89\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 309  : "xn--exptwondn-m5a502c.example"
 310  : /* 4-1-2-6 exptwo<0149><00ED>dn.example -> exptwo<02BC><006E><00ED>dn.example */
 311  : /* Don't resolve as xn--exptwodn-h2a33g.example */
 312  : },
 313  : {"\x61\x64\x64\x66\x6f\x6c\x64\xcf\x92\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 314  : "xn--addfolddn-m5a121f.example"
 315  : /* 4-1-2-7 addfold<03D2><00ED>dn.example -> addfold<03C5><00ED>dn.example */
 316  : /* Don't resolve as xn--addfolddn-m5a462f.example */
 317  : },
 318  : {"\x65\x78\x70\x74\x68\x72\x65\x65\xe1\xbd\x92\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 319  : "xn--expthreedn-r8a5844g.example"
 320  : /* 4-1-2-8 expthree<1F52><00ED>dn.example -> expthree<03C5><0313><0300><00ED>dn.example */
 321  : },
 322  : {"\x6e\x6f\x6e\x62\x6d\x70\xf0\x90\x90\x80\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 323  : "xn--nonbmpdn-h2a34747d.example"
 324  : /* 4-1-2-9 nonbmp<10400><00ED>dn.example -> nonbmp<10428><00ED>dn.example */
 325  : /* Don't resolve as xn--nonbmpdn-h2a37046d.example */
 326  : },
 327  : {"\x6e\x6f\x6e\x62\x6d\x70\x74\x6f\x61\x73\x63\x69\x69\xf0\x9d\x90\x80\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 328  : "xn--nonbmptoasciiadn-msb.example"
 329  : /* 4-1-2-10 nonbmptoascii<1D400><00ED>dn.example -> nonbmptoasciia<00ED>dn.example */
 330  : /* Don't resolve as xn--nonbmptoasciidn-hpb54112i.example */
 331  : },
 332  : {"\x72\x65\x67\x63\x6f\x6d\x62\x65\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 333  : "xn--regcombdn-h4a8b.example"
 334  : /* 4-2-1-1 regcomb<0065><0301><00ED>dn.example -> regcomb<00E9><00ED>dn.example */
 335  : /* Don't resolve as xn--regcombedn-r8a794d.example */
 336  : },
 337  : {"\x63\x6f\x6d\x62\x61\x6e\x64\x63\x61\x73\x65\x45\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 338  : "xn--combandcasedn-lhb4d.example"
 339  : /* 4-2-1-2 combandcase<0045><0301><00ED>dn.example -> combandcase<00E9><00ED>dn.example */
 340  : /* Don't resolve as xn--combandcaseedn-cmb526f.example */
 341  : },
 342  : {"\x61\x64\x6a\x63\x6f\x6d\x62\xc2\xba\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 343  : "xn--adjcombdn-m5a9d.example"
 344  : /* 4-2-1-3 adjcomb<00BA><0301><00ED>dn.example -> adjcomb<00F3><00ED>dn.example */
 345  : /* Don't resolve as xn--adjcombdn-1qa57cp3r.example */
 346  : },
 347  : {"\x65\x78\x74\x63\x6f\x6d\x62\x6f\x63\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 348  : "xn--extcombodn-r8a52a.example"
 349  : /* 4-2-1-4 extcombo<0063><0301><00ED>dn.example -> extcombo<0107><00ED>dn.example */
 350  : /* Don't resolve as xn--extcombocdn-wcb920e.example */
 351  : },
 352  : {"\x64\x6f\x75\x62\x6c\x65\x64\x69\x61\x63\x31\x75\xcc\x88\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 353  : "xn--doublediac1dn-6ib836a.example"
 354  : /* 4-2-1-5 doublediac1<0075><0308><0301><00ED>dn.example -> doublediac2<01D8><00ED>dn.example */
 355  : /* Don't resolve as xn--doublediac1udn-cmb526fnd.example */
 356  : },
 357  : {"\x64\x6f\x75\x62\x6c\x65\x64\x69\x61\x63\x32\x75\xcc\x81\xcc\x88\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 358  : "xn--doublediac2dn-6ib8qs73a.example"
 359  : /* 4-2-1-6 doublediac2<0075><0301><0308><00ED>dn.example -> doublediac2<01D8><00ED>dn.example */
 360  : /* Don't resolve as xn--doublediac2udn-cmb526fod.example */
 361  : },
 362  : {"\x6e\x65\x77\x6e\x6f\x72\x6d\xf0\xaf\xa1\xb4\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 363  : "xn--newnormdn-m5a7856x.example"
 364  : /* 4-2-2-1 newnorm<2F874><00ED>dn.example -> newnorm<5F33><00ED>dn.example should not become <5F53> */
 365  : /* Don't resolve as xn--newnormdn-m5a9396x.example */
 366  : /* Don't resolve as xn--newnormdn-m5a9968x.example */
 367  : },
 368  : {"\xe2\x80\x80\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 369  : /* 4-3-1 Spacing */
 370  : /* Don't resolve as xn--dn-mja3392a.example */
 371  : },
 372  : {"\xdb\x9d\xc3\xad\x64\x6e\x2d\x32\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 373  : /* 4-3-2 Control */
 374  : /* Don't resolve as xn--dn-2-upa332g.example */
 375  : },
 376  : {"\xee\x80\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 377  : /* 4-3-3 Private use */
 378  : /* Don't resolve as xn--dn-mja1659t.example */
 379  : },
 380  : {"\xf3\xb0\x80\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 381  : /* 4-3-4 Private use, non-BMP */
 382  : /* Don't resolve as xn--dn-mja7922x.example */
 383  : },
 384  : {"\xef\xb7\x9d\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 385  : /* 4-3-5 Non-character */
 386  : /* Don't resolve as xn--dn-mja1210x.example */
 387  : },
 388  : {"\xf0\x9f\xbf\xbe\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 389  : /* 4-3-6 Non-character, non-BMP */
 390  : /* Don't resolve as xn--dn-mja7922x.example */
 391  : },
 392  : {"\xef\xbf\xbd\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 393  : /* 4-3-7 Surrogate points */
 394  : /* Don't resolve as xn--dn-mja7922x.example */
 395  : },
 396  : {"\xef\xbf\xba\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 397  : /* 4-3-8 Inappropriate for plain */
 398  : /* Don't resolve as xn--dn-mja5822x.example */
 399  : },
 400  : {"\xe2\xbf\xb5\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 401  : /* 4-3-9 Inappropriate for canonical */
 402  : /* Don't resolve as xn--dn-mja3729b.example */
 403  : },
 404  : {"\xe2\x81\xaa\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 405  : /* 4-3-10 Change display simple */
 406  : /* Don't resolve as xn--dn-mja7533a.example */
 407  : },
 408  : {"\xe2\x80\x8f\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 409  : /* 4-3-11 Change display RTL */
 410  : /* Don't resolve as xn--dn-mja3992a.example */
 411  : },
 412  : {"\xf3\xa0\x80\x81\xf3\xa0\x81\x85\xf3\xa0\x81\x8e\x68\x69\x69\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 413  : ""
 414  : /* 4-3-12 Language tags */
 415  : /* Don't resolve as xn--hiidn-km43aaa.example */
 416  : },
 417  : {"\xd8\xa8\x6f\xd8\xb8\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 418  : /* 4-4-1 Arabic RandALCat-LCat-RandALCat */
 419  : /* Don't resolve as xn--o-0mc3c.example */
 420  : },
 421  : {"\xd8\xa8\xd8\xb8\x6f\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 422  : /* 4-4-2 Arabic RandALCat-RandALCat-other */
 423  : /* Don't resolve as xn--o-0mc2c.example */
 424  : },
 425  : {"\x6f\xd8\xa8\xd8\xb8\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 426  : /* 4-4-3 Arabic other-RandALCat-RandALCat */
 427  : /* Don't resolve as xn--o-1mc2c.example */
 428  : },
 429  : {"\xd7\x91\x6f\xd7\xa1\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 430  : /* 4-4-4 Hebrew RandALCat-LCat-RandALCat */
 431  : /* Don't resolve as xn--o-1hc3c.example */
 432  : },
 433  : {"\xd7\x91\xd7\xa1\x6f\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 434  : /* 4-4-5 Hebrew RandALCat-RandALCat-other */
 435  : /* Don't resolve as xn--o-1hc2c.example */
 436  : },
 437  : {"\x6f\xd7\x91\xd7\xa1\x2e\x65\x78\x61\x6d\x70\x6c\x65", ""
 438  : /* 4-4-6 Hebrew other-RandALCat-RandALCat */
 439  : /* Don't resolve as xn--o-2hc2c.example */
 440  : },
 441  : {"\xc8\xb7\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 442  : "xn--dn-mja33k.example"
 443  : /* 5-1-1 Unassigned in BMP; zone editors should reject */
 444  : },
 445  : {"\xf0\x90\x88\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 446  : "xn--dn-mja7734x.example"
 447  : /* 5-1-2 Unassinged outside BMP; zone editors should reject */
 448  : /* Don't resolve as xn--dn-mja7922x.example */
 449  : },
 450  : {"\xc8\xb4\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 451  : "xn--dn-mja12k.example"
 452  : /* 5-2-1 Newly assigned in BMP; zone editors should reject */
 453  : },
 454  : {"\xf0\x90\x80\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
 455  : "xn--dn-mja9232x.example"
 456  : /* 5-2-2 Newly assigned outside of BMP; zone editors should reject */
 457  : /* Don't resolve as xn--dn-mja7922x.example */
 458  : }
 459  : };
 460  : 
 461  : void
 462  1 : doit (void)
 463  : {
 464  : unsigned i;
 465  : char *out;
 466  : int rc;
 467  : 
 468  99 : for (i = 0; i < sizeof (idna) / sizeof (idna[0]); i++)
 469  : {
 470  98 : if (debug)
 471  0 : printf ("IDNA2 entry %u\n", i);
 472  : 
 473  98 : if (debug)
 474  : {
 475  : uint32_t *p;
 476  : size_t len;
 477  0 : printf ("in: %s\n", idna[i].in);
 478  0 : hexprint (idna[i].in, strlen (idna[i].in));
 479  0 : escapeprint (idna[i].in, strlen (idna[i].in));
 480  0 : p = stringprep_utf8_to_ucs4 (idna[i].in, -1, &len);
 481  0 : ucs4print (p, len);
 482  0 : free (p);
 483  : }
 484  : 
 485  98 : rc = idna_to_ascii_8z (idna[i].in, &out,
 486  : IDNA_ALLOW_UNASSIGNED |
 487  : IDNA_USE_STD3_ASCII_RULES);
 488  98 : if (rc != IDNA_SUCCESS && strlen (idna[i].out) > 0)
 489  : {
 490  0 : fail ("IDNA2 entry %u failed: %d\n", i, rc);
 491  0 : continue;
 492  : }
 493  : 
 494  98 : if (debug && rc == IDNA_SUCCESS)
 495  : {
 496  0 : printf ("computed out: %s\n", out);
 497  0 : printf ("expected out: %s\n", idna[i].out);
 498  : }
 499  98 : else if (debug)
 500  0 : printf ("returned %d\n", rc);
 501  : 
 502  98 : if (rc == IDNA_SUCCESS)
 503  : {
 504  69 : if (strlen (idna[i].out) != strlen (out) ||
 505  69 : strcasecmp (idna[i].out, out) != 0)
 506  : {
 507  0 : fail ("IDNA2 entry %u failed\n", i);
 508  0 : if (debug)
 509  0 : printf ("ERROR\n");
 510  : }
 511  69 : else if (debug)
 512  0 : printf ("OK\n");
 513  : 
 514  69 : free (out);
 515  69 : out = NULL;
 516  : }
 517  29 : else if (rc != IDNA_SUCCESS && strlen (idna[i].out) == 0 && debug)
 518  0 : printf ("OK (fail)\n");
 519  29 : else if (debug)
 520  0 : printf ("OK\n");
 521  : }
 522  1 : }

Generated by: LCOV version 1.13

AltStyle によって変換されたページ (->オリジナル) /