MDL-56978 core: fix error handling in min_fix_utf8

Must completely suppress notice from iconv as Behat's
shutdown function uses error_get_last() which is
unable to detect if the error was suppressed or not.
This commit is contained in:
Mark Nielsen 2016-11-16 08:59:15 -08:00
parent b4d6669dd0
commit 6670d28fbc

View file

@ -89,18 +89,16 @@ function min_clean_param($value, $type) {
* @return string
*/
function min_fix_utf8($value) {
// Lower error reporting because glibc throws bogus notices.
$olderror = error_reporting();
if ($olderror & E_NOTICE) {
error_reporting($olderror ^ E_NOTICE);
}
// No null bytes expected in our data, so let's remove it.
$value = str_replace("\0", '', $value);
static $buggyiconv = null;
if ($buggyiconv === null) {
set_error_handler(function () {
return true;
});
$buggyiconv = (!function_exists('iconv') or iconv('UTF-8', 'UTF-8//IGNORE', '100'.chr(130).'€') !== '100€');
restore_error_handler();
}
if ($buggyiconv) {
@ -116,11 +114,7 @@ function min_fix_utf8($value) {
}
} else {
$result = iconv('UTF-8', 'UTF-8//IGNORE', $value);
}
if ($olderror & E_NOTICE) {
error_reporting($olderror);
$result = @iconv('UTF-8', 'UTF-8//IGNORE', $value);
}
return $result;