--- a/util-src/encodings.c Thu Sep 12 15:17:12 2019 +0200
+++ b/util-src/encodings.c Wed Sep 11 00:14:59 2019 +0200
@@ -269,6 +269,7 @@
#include <unicode/ustring.h>
#include <unicode/utrace.h>
#include <unicode/uspoof.h>
+#include <unicode/uidna.h>
static int icu_stringprep_prep(lua_State *L, const UStringPrepProfile *profile) {
size_t input_len;
@@ -323,6 +324,7 @@
UStringPrepProfile *icu_resourceprep;
UStringPrepProfile *icu_saslprep;
USpoofChecker *icu_spoofcheck;
+UIDNA *icu_idna2008;
#if (U_ICU_VERSION_MAJOR_NUM < 58)
/* COMPAT */
@@ -339,6 +341,7 @@
icu_saslprep = usprep_openByType(USPREP_RFC4013_SASLPREP, &err);
icu_spoofcheck = uspoof_open(&err);
uspoof_setChecks(icu_spoofcheck, USPOOF_CONFUSABLE, &err);
+ icu_idna2008 = uidna_openUTS46(UIDNA_USE_STD3_RULES, &err);
if(U_FAILURE(err)) {
fprintf(stderr, "[c] util.encodings: error: %s\n", u_errorName((UErrorCode)err));
@@ -434,9 +437,10 @@
return 1;
}
- dest_len = uidna_IDNToASCII(ustr, ulen, dest, 1024, UIDNA_USE_STD3_RULES, NULL, &err);
+ UIDNAInfo info = UIDNA_INFO_INITIALIZER;
+ dest_len = uidna_nameToASCII(icu_idna2008, ustr, ulen, dest, 256, &info, &err);
- if(U_FAILURE(err)) {
+ if(U_FAILURE(err) || info.errors) {
lua_pushnil(L);
return 1;
} else {
@@ -468,9 +472,10 @@
return 1;
}
- dest_len = uidna_IDNToUnicode(ustr, ulen, dest, 1024, UIDNA_USE_STD3_RULES, NULL, &err);
+ UIDNAInfo info = UIDNA_INFO_INITIALIZER;
+ dest_len = uidna_nameToUnicode(icu_idna2008, ustr, ulen, dest, 1024, &info, &err);
- if(U_FAILURE(err)) {
+ if(U_FAILURE(err) || info.errors) {
lua_pushnil(L);
return 1;
} else {