From 0e344b6a50d0cec40428f4f33a16089d36a44954 Mon Sep 17 00:00:00 2001 From: William Desportes Date: Sat, 25 Jul 2020 19:49:07 +0200 Subject: [PATCH 1/2] Fix #16256 - Warning: error_reporting() has been disabled for security reasons on php 7.x Signed-off-by: William Desportes --- libraries/classes/Config.php | 4 ++-- libraries/classes/ErrorHandler.php | 4 ++-- libraries/classes/Util.php | 20 ++++++++++++++++++++ show_config_errors.php | 1 + 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/libraries/classes/Config.php b/libraries/classes/Config.php index 81b303176b..4004402ecd 100644 --- a/libraries/classes/Config.php +++ b/libraries/classes/Config.php @@ -779,7 +779,7 @@ class Config $this->error_config_default_file = true; return false; } - $canUseErrorReporting = function_exists('error_reporting'); + $canUseErrorReporting = Util::isErrorReportingAvailable(); $oldErrorReporting = null; if ($canUseErrorReporting) { $oldErrorReporting = error_reporting(0); @@ -837,7 +837,7 @@ class Config * Parses the configuration file, we throw away any errors or * output. */ - $canUseErrorReporting = function_exists('error_reporting'); + $canUseErrorReporting = Util::isErrorReportingAvailable(); $oldErrorReporting = null; if ($canUseErrorReporting) { $oldErrorReporting = error_reporting(0); diff --git a/libraries/classes/ErrorHandler.php b/libraries/classes/ErrorHandler.php index 84e3a64abe..1d37b4351a 100644 --- a/libraries/classes/ErrorHandler.php +++ b/libraries/classes/ErrorHandler.php @@ -52,7 +52,7 @@ class ErrorHandler if (! defined('TESTSUITE')) { set_error_handler([$this, 'handleError']); } - if (function_exists('error_reporting')) { + if (Util::isErrorReportingAvailable()) { $this->error_reporting = error_reporting(); } } @@ -165,7 +165,7 @@ class ErrorHandler string $errfile, int $errline ): void { - if (function_exists('error_reporting')) { + if (Util::isErrorReportingAvailable()) { /** * Check if Error Control Operator (@) was used, but still show * user errors even in this case. diff --git a/libraries/classes/Util.php b/libraries/classes/Util.php index f033113b91..e6a9e294dc 100644 --- a/libraries/classes/Util.php +++ b/libraries/classes/Util.php @@ -4997,4 +4997,24 @@ class Util } return ''; } + + /** + * Check if error reporting is available + * @return bool + */ + public static function isErrorReportingAvailable(): bool + { + // issue #16256 - PHP 7.x does not return false for a core function + if (PHP_MAJOR_VERSION < 8) { + $disabled = ini_get('disable_functions'); + if (is_string($disabled)) { + $disabled = explode(',', $disabled); + $disabled = array_map(function (string $part) { + return trim($part); + }, $disabled); + return ! in_array('error_reporting', $disabled); + } + } + return function_exists('error_reporting'); + } } diff --git a/show_config_errors.php b/show_config_errors.php index 46d854af9b..08e2535179 100644 --- a/show_config_errors.php +++ b/show_config_errors.php @@ -34,6 +34,7 @@ header('Content-Type: text/html; charset=utf-8'); require ROOT_PATH . 'libraries/vendor_config.php'; +// issue #16256 - This only works with php 8.0+ if (function_exists('error_reporting')) { error_reporting(E_ALL); } From a1312c7af2eda52087f565f62f5471dab8dff733 Mon Sep 17 00:00:00 2001 From: William Desportes Date: Sat, 25 Jul 2020 19:51:34 +0200 Subject: [PATCH 2/2] Add a ChangeLog entry for #16256 Signed-off-by: William Desportes --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 9f58ea6e16..584a04f419 100644 --- a/ChangeLog +++ b/ChangeLog @@ -46,6 +46,7 @@ phpMyAdmin - ChangeLog - issue #16146 Fixed sorting did not keep the selector of number of rows - issue #16194 Fixed SQL query does not appear in case of editing view where definer is not you on MySQL 8 - issue #16255 Fix tinyint(1) shown as INT on Search page +- issue #16256 Fix "Warning: error_reporting() has been disabled for security reasons" on php 7.x 5.0.2 (2020-03-20) - issue Fixed deprecation warning "implode(): Passing glue string after array is deprecated." function on export page