From 6f5ea67f7fa8643368eeb0438f890582c8bed8e6 Mon Sep 17 00:00:00 2001 From: addshore Date: Wed, 5 Mar 2014 14:25:07 +0100 Subject: [PATCH] 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 --- tests/phpunit/MediaWikiTestCase.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 -- 2.20.1