From 8a09b9d26126bab29ccc4391a5ebb4de256522a5 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Mon, 25 Jan 2010 04:59:46 +0000 Subject: [PATCH] Made the bug #21793 test only check for the PHP 5.3.x version of the bug, and allow the PHP 5.2.x version. There isn't actually any reported MW bug arising from the 5.2.x version at this time. --- maintenance/install-utils.inc | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/maintenance/install-utils.inc b/maintenance/install-utils.inc index 70bcf519fa..bb2cac3999 100644 --- a/maintenance/install-utils.inc +++ b/maintenance/install-utils.inc @@ -44,17 +44,15 @@ function install_version_checks() { } $test = new PhpRefCallBugTester; - $ok = false; - call_user_func_array( array( $test, 'test' ), array( &$ok ) ); - if ( !$ok ) { - echo "PHP 5.2.11, 5.2.12, and 5.3.1 (your version: " . phpversion() . ") are not compatible with\n" . - "MediaWiki due to a bug involving reference parameters to __call. Upgrade to\n" . - "PHP 5.3.2 (5.2.13 for 5.2 users), or downgrade to PHP 5.3.0 (5.2.10 for 5.2\n" . - "users) to fix this. ABORTING (see http://bugs.php.net/bug.php?id=50394 for details)\n"; + $test->execute(); + if ( !$test->ok ) { + echo "PHP 5.3.1 is not compatible with MediaWiki due to a bug involving\n" . + "reference parameters to __call. Upgrade to PHP 5.3.2 or higher, or \n" . + "downgrade to PHP 5.3.0 to fix this.\n" . + "ABORTING (see http://bugs.php.net/bug.php?id=50394 for details)\n"; die( 1 ); } - global $wgCommandLineMode; $wgCommandLineMode = true; umask( 000 ); @@ -84,11 +82,26 @@ class PhpXmlBugTester { } /** - * Test for PHP bug #50394 + * Test for PHP bug #50394 (PHP 5.3.x conversion to null only, not 5.2.x) */ class PhpRefCallBugTester { + public $ok = false; + function __call( $name, $args ) { - $args[0] = true; + $old = error_reporting( E_ALL & ~E_WARNING ); + call_user_func_array( array( $this, 'checkForBrokenRef' ), $args ); + error_reporting( $old ); + } + + function checkForBrokenRef( &$var ) { + if ( $var ) { + $this->ok = true; + } + } + + function execute() { + $var = true; + call_user_func_array( array( $this, 'foo' ), array( &$var ) ); } } -- 2.20.1