From 04d5402e2fdd02c46834b23909dcdae997ccc3a9 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 4 Jul 2014 07:59:02 -0700 Subject: [PATCH] Fatal during setup for "mbstring.func_overload" Summary: Fixes T5545. We assume `strlen()` returns the number of bytes in a string, which is the normal behavior (and the documented behavior). There's a config option, `mbstring.func_overload`, which silently calls mb_strlen() instead. This may return some other result, might fail, etc., and there's no way to get the byte length of a string if this option is set. If this option is set, fatal immediately. Nothing good can ever come of it. Test Plan: {F173990} Reviewers: btrahan, chad Reviewed By: chad Subscribers: epriestley Maniphest Tasks: T5545 Differential Revision: https://secure.phabricator.com/D9811 --- .../check/PhabricatorSetupCheckPHPConfig.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/applications/config/check/PhabricatorSetupCheckPHPConfig.php b/src/applications/config/check/PhabricatorSetupCheckPHPConfig.php index 2da2e43e85..f06a4ae41c 100644 --- a/src/applications/config/check/PhabricatorSetupCheckPHPConfig.php +++ b/src/applications/config/check/PhabricatorSetupCheckPHPConfig.php @@ -75,6 +75,23 @@ final class PhabricatorSetupCheckPHPConfig extends PhabricatorSetupCheck { } } + $overload_option = 'mbstring.func_overload'; + $func_overload = ini_get($overload_option); + if ($func_overload) { + $message = pht( + "You have '%s' enabled in your PHP configuration.\n\n". + "This option is not compatible with Phabricator. Disable ". + "'%s' in your PHP configuration to continue.", + $overload_option, + $overload_option); + + $this->newIssue('php'.$overload_option) + ->setIsFatal(true) + ->setName(pht('Disable PHP %s', $overload_option)) + ->setMessage($message) + ->addPHPConfig($overload_option); + } + $open_basedir = ini_get('open_basedir'); if ($open_basedir) {