From 76e249d31c51d0b4f8f11507c550ca1eec1dd38a Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Tue, 12 Jul 2016 14:42:38 +0200 Subject: [PATCH] Partially fix #72506: idn_to_ascii for UTS #46 incorrect for long domain names We don't actually fix this issue wrt. the empty $info array, because it is not clear what this array should contain and we're concerned about the potential BC break, but at least we fix the inconsistent handling of resulting domains with 255 bytes (which raise an error), and longer domains (which just return FALSE), what has to be considered a very minor BC break if at all. --- NEWS | 4 ++++ ext/intl/idn/idn.c | 5 +---- ext/intl/tests/bug72506.phpt | 37 ++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 ext/intl/tests/bug72506.phpt diff --git a/NEWS b/NEWS index 154d14903b..6cb61d4916 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,10 @@ PHP NEWS . Fixed bug #72575 (using --allow-to-run-as-root should ignore missing user). (gooh) +- Intl: + . Partially fixed #72506 (idn_to_ascii for UTS #46 incorrect for long domain + names). (cmb) + - PDO: . Fixed bug #52384 (Adds bound parameter value to PDOStatement::debugDumpParams). (bishopb) diff --git a/ext/intl/idn/idn.c b/ext/intl/idn/idn.c index 6332488cc9..fb17e3445c 100644 --- a/ext/intl/idn/idn.c +++ b/ext/intl/idn/idn.c @@ -158,15 +158,12 @@ static void php_intl_idn_to_46(INTERNAL_FUNCTION_PARAMETERS, len = uidna_nameToUnicodeUTF8(uts46, domain, (int32_t)domain_len, 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) { uidna_close(uts46); efree(buffer); RETURN_FALSE; } - if (len >= 255) { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "ICU returned an unexpected length"); - } buffer[len] = '\0'; diff --git a/ext/intl/tests/bug72506.phpt b/ext/intl/tests/bug72506.phpt new file mode 100644 index 0000000000..a7c561c740 --- /dev/null +++ b/ext/intl/tests/bug72506.phpt @@ -0,0 +1,37 @@ +--TEST-- +Bug #72506 (idn_to_ascii with INTL_IDNA_VARIANT_UTS46 fatals for long domain names) +--DESCRIPTION-- +Actually, the $info array should be populated for these cases, but at least it's +not clear yet with which values exactly. +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(false) +array(0) { +} +bool(false) +array(0) { +} +bool(false) +array(0) { +} -- 2.40.0