From 31b11be35dd841dc1a97c45321b22c3376b01031 Mon Sep 17 00:00:00 2001 From: Tim Rühsen Date: Thu, 8 Feb 2018 12:52:06 +0100 Subject: [PATCH] Fix STD3 ASCII rules --- lib/idna.c | 15 ++++++++++++++- lib/lookup.c | 5 ++++- tests/test-lookup.c | 9 ++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/idna.c b/lib/idna.c index 5434492..c961332 100644 --- a/lib/idna.c +++ b/lib/idna.c @@ -180,7 +180,20 @@ _idn2_label_test (int what, const uint32_t * label, size_t llen) size_t i; for (i = 0; i < llen; i++) if (_idn2_disallowed_p (label[i])) - return IDN2_DISALLOWED; + { + if ((what & (TEST_TRANSITIONAL | TEST_NONTRANSITIONAL)) && + (what & TEST_ALLOW_STD3_DISALLOWED)) + { + IDNAMap map; + get_idna_map (label[i], &map); + if (map_is (&map, TR46_FLG_DISALLOWED_STD3_VALID) || + map_is (&map, TR46_FLG_DISALLOWED_STD3_MAPPED)) + continue; + + } + + return IDN2_DISALLOWED; + } } if (what & TEST_CONTEXTJ) diff --git a/lib/lookup.c b/lib/lookup.c index 10b004f..9094aeb 100644 --- a/lib/lookup.c +++ b/lib/lookup.c @@ -89,7 +89,10 @@ label (const uint8_t * src, size_t srclen, uint8_t * dst, size_t * dstlen, TEST_DISALLOWED | TEST_CONTEXTJ_RULE | TEST_CONTEXTO_WITH_RULE | - TEST_UNASSIGNED | TEST_BIDI, p, plen); + TEST_UNASSIGNED | TEST_BIDI | + ((flags & IDN2_NONTRANSITIONAL) ? TEST_NONTRANSITIONAL : 0) | + ((flags & IDN2_USE_STD3_ASCII_RULES) ? 0 : TEST_ALLOW_STD3_DISALLOWED), + p, plen); if (rc != IDN2_OK) { diff --git a/tests/test-lookup.c b/tests/test-lookup.c index 03d8396..fb23427 100644 --- a/tests/test-lookup.c +++ b/tests/test-lookup.c @@ -814,13 +814,20 @@ static const struct idna idna[] = { }, /* √.com */ {"\xe2\x88\x9a.com", "xn--19g.com", IDN2_OK, IDN2_TRANSITIONAL}, - /* domains with non-STD3 characters (removed by default when using TR46 transitional/non-trnasitional */ + /* domains with non-STD3 characters (removed by default when using TR46 transitional/non-transitional */ {"_443._tcp.example.com", "_443._tcp.example.com", IDN2_OK, 0}, {"_443._tcp.example.com", "_443._tcp.example.com", IDN2_OK, IDN2_TRANSITIONAL}, {"_443._tcp.example.com", "_443._tcp.example.com", IDN2_OK, IDN2_NONTRANSITIONAL}, {"_443._tcp.example.com", "443.tcp.example.com", IDN2_OK, IDN2_USE_STD3_ASCII_RULES|IDN2_NONTRANSITIONAL}, {"_443._tcp.example.com", "443.tcp.example.com", IDN2_OK, IDN2_USE_STD3_ASCII_RULES|IDN2_TRANSITIONAL}, {"_443._tcp.example.com", "_443._tcp.example.com", IDN2_OK, IDN2_USE_STD3_ASCII_RULES}, /* flag is ignored when not using TR46 */ + /* _üˆš */ + {"_\xc3\xbc", "xn--_-eha", IDN2_DISALLOWED, 0}, + {"_\xc3\xbc", "xn--_-eha", IDN2_OK, IDN2_TRANSITIONAL}, + {"_\xc3\xbc", "xn--_-eha", IDN2_OK, IDN2_NONTRANSITIONAL}, + {"_\xc3\xbc", "xn--tda", IDN2_OK, IDN2_USE_STD3_ASCII_RULES|IDN2_NONTRANSITIONAL}, + {"_\xc3\xbc", "xn--tda", IDN2_OK, IDN2_USE_STD3_ASCII_RULES|IDN2_TRANSITIONAL}, + {"_\xc3\xbc", "xn--_-eha", IDN2_DISALLOWED, IDN2_USE_STD3_ASCII_RULES}, /* flag is ignored when not using TR46 */ }; static int ok = 0, failed = 0; -- libgit2 0.26.0 From f09a3c4657838e63751f9cd0c6c2b4f7485b68e9 Mon Sep 17 00:00:00 2001 From: Tim Rühsen Date: Sun, 18 Feb 2018 18:38:25 +0100 Subject: [PATCH] Fix idn2 --nostd3asciirules to --usestd3asciirules --- src/idn2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/idn2.c b/src/idn2.c index a3e19c0..4a13a82 100644 --- a/src/idn2.c +++ b/src/idn2.c @@ -92,7 +92,7 @@ Mandatory arguments to long options are mandatory for short options too.\n\ --no-tr46 Disable TR46 processing\n\ "), stdout); fputs (_("\ - --nostd3asciirules Disable STD3 ASCII rules\n\ + --usestd3asciirules Enable STD3 ASCII rules\n\ --debug Print debugging information\n\ --quiet Silent operation\n\ "), stdout); -- libgit2 0.26.0