]> granicus.if.org Git - php/commitdiff
Move to non deprecated API on suitable ICU versions
authorAnatol Belski <ab@php.net>
Thu, 5 Apr 2018 11:58:03 +0000 (13:58 +0200)
committerAnatol Belski <ab@php.net>
Thu, 5 Apr 2018 11:58:03 +0000 (13:58 +0200)
ext/intl/idn/idn.c

index d2148cf58c5466176fedd840a97968e8fce253d3..a7f40ba66ea498efd00300879263a8ce04dbb15b 100644 (file)
@@ -218,16 +218,34 @@ static void php_intl_idn_to(INTERNAL_FUNCTION_PARAMETERS,
                }
                RETURN_FALSE;
        } else {
-               UParseError parse_error;
                UChar       converted[MAXPATHLEN];
                int32_t     converted_ret_len;
 
                status = U_ZERO_ERROR;
+
+#if U_ICU_VERSION_MAJOR_NUM >= 55
+               UIDNAInfo info = UIDNA_INFO_INITIALIZER;
+               UIDNA *idna = uidna_openUTS46((int32_t)option, &status);
+
+               if (U_FAILURE(status)) {
+                       intl_error_set( NULL, status, "idn_to_ascii: failed to create an UIDNA instance", 0 );
+                       RETURN_FALSE;
+               }
+
+               if (mode == INTL_IDN_TO_ASCII) {
+                       converted_ret_len = uidna_nameToASCII(idna, ustring, ustring_len, converted, MAXPATHLEN, &info, &status);
+               } else {
+                       converted_ret_len = uidna_nameToUnicode(idna, ustring, ustring_len, converted, MAXPATHLEN, &info, &status);
+               }
+               uidna_close(idna);
+#else
+               UParseError parse_error;
                if (mode == INTL_IDN_TO_ASCII) {
                        converted_ret_len = uidna_IDNToASCII(ustring, ustring_len, converted, MAXPATHLEN, (int32_t)option, &parse_error, &status);
                } else {
                        converted_ret_len = uidna_IDNToUnicode(ustring, ustring_len, converted, MAXPATHLEN, (int32_t)option, &parse_error, &status);
                }
+#endif
                efree(ustring);
 
                if (U_FAILURE(status)) {