From: addshore Date: Wed, 5 Mar 2014 13:25:07 +0000 (+0100) Subject: Make sure we don't use objects by ref in setMwGlobals X-Git-Tag: 1.31.0-rc.0~16737^2 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_aide%28?a=commitdiff_plain;h=6f5ea67f7fa8643368eeb0438f890582c8bed8e6;p=lhc%2Fweb%2Fwiklou.git Make sure we don't use objects by ref in setMwGlobals If we copy am object by ref into our temporary array then this doesn't really make this method very useful as the same object would be restored, with any changes after the test has run. Thus objects should be cloned when being dumped in here, we use unserialize() and serialize() instead as we would also want to clone the objects within the object to avoid changes in there! These is no point in adding an if is_object call so we just serialize and deserialize everything! Change-Id: I5e4ef114405888932014edae6b44afc6ee2c4863 --- diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php index 87e214cb9e..9ca1cabc22 100644 --- a/tests/phpunit/MediaWikiTestCase.php +++ b/tests/phpunit/MediaWikiTestCase.php @@ -312,7 +312,10 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { // setMwGlobals() on the same global would override the original // value. if ( !array_key_exists( $key, $this->mwGlobals ) ) { - $this->mwGlobals[$key] = $GLOBALS[$key]; + // NOTE: we serialize then unserialize the value in case it is an object + // this stops any objects being passed by reference. We could use clone + // and if is_object but this does account for objects within objects! + $this->mwGlobals[$key] = unserialize( serialize( $GLOBALS[$key] ) ); } // Override the global