}
if (mode == INTL_IDN_TO_ASCII) {
- len = uidna_nameToASCII_UTF8(uts46, domain, (int32_t)domain_len,
- buffer, buffer_capac, &info, &status);
+ len = uidna_nameToASCII_UTF8(uts46, domain, domain_len,
+ ZSTR_VAL(buffer), buffer_capac, &info, &status);
} else {
- len = uidna_nameToUnicodeUTF8(uts46, domain, (int32_t)domain_len,
- buffer, buffer_capac, &info, &status);
+ len = uidna_nameToUnicodeUTF8(uts46, domain, domain_len,
+ ZSTR_VAL(buffer), buffer_capac, &info, &status);
}
- if (php_intl_idn_check_status(status, "failed to convert name",
+ if (len >= 255 || php_intl_idn_check_status(status, "failed to convert name",
- mode TSRMLS_CC) == FAILURE) {
+ mode) == FAILURE) {
uidna_close(uts46);
- efree(buffer);
+ zend_string_free(buffer);
RETURN_FALSE;
}
- if (len >= 255) {
- php_error_docref(NULL, E_ERROR, "ICU returned an unexpected length");
- }
- buffer[len] = '\0';
+ ZSTR_VAL(buffer)[len] = '\0';
+ ZSTR_LEN(buffer) = len;
if (info.errors == 0) {
- RETVAL_STRINGL(buffer, len, 0);
+ RETVAL_STR(buffer);
buffer_used = 1;
} else {
RETVAL_FALSE;