Skip to content

Commit

Permalink
MDL-56978 core: fix error handling in min_fix_utf8
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
polothy committed Nov 16, 2016
1 parent b4d6669 commit 6670d28
Showing 1 changed file with 5 additions and 11 deletions.
16 changes: 5 additions & 11 deletions lib/configonlylib.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
Expand Down

0 comments on commit 6670d28

Please sign in to comment.