When serializing Message, don't try to unstub StubUserLang
authorBrad Jorsch <bjorsch@wikimedia.org>
Mon, 18 Jan 2016 22:18:19 +0000 (17:18 -0500)
committerBrad Jorsch <bjorsch@wikimedia.org>
Sat, 30 Jan 2016 02:26:24 +0000 (21:26 -0500)
If the serialization is happening during PHP shutdown due to a Session
save, it can fatal because $wgLang is already gone.

Change-Id: I7d877be15ef8639f3b94b74bba763053ec289358

includes/Message.php

index 54efd26..c71a953 100644 (file)
@@ -271,7 +271,7 @@ class Message implements MessageSpecifier, Serializable {
        public function serialize() {
                return serialize( array(
                        'interface' => $this->interface,
-                       'language' => $this->language->getCode(),
+                       'language' => $this->language instanceof StubUserLang ? false : $this->language->getCode(),
                        'key' => $this->key,
                        'keysToTry' => $this->keysToTry,
                        'parameters' => $this->parameters,
@@ -287,6 +287,8 @@ class Message implements MessageSpecifier, Serializable {
         * @param string $serialized
         */
        public function unserialize( $serialized ) {
+               global $wgLang;
+
                $data = unserialize( $serialized );
                $this->interface = $data['interface'];
                $this->key = $data['key'];
@@ -294,7 +296,7 @@ class Message implements MessageSpecifier, Serializable {
                $this->parameters = $data['parameters'];
                $this->format = $data['format'];
                $this->useDatabase = $data['useDatabase'];
-               $this->language = Language::factory( $data['language'] );
+               $this->language = $data['language'] ? Language::factory( $data['language'] ) : $wgLang;
                $this->title = $data['title'];
        }