jenkins-bot has submitted this change and it was merged.

Change subject: Fix Message::newFromSpecifier for nested RawMessage
......................................................................


Fix Message::newFromSpecifier for nested RawMessage

This can happen e.g. when something processes Status contents
and expects [$key, $param1, ...] and instead gets [$messageObject]

Change-Id: I346b35e08bd38ce231e16d0616438ea408b55bff
(cherry picked from commit b6516e11f1fe4d3f5f8085f8ccbbcdf24303b9d8)
---
M includes/Message.php
M tests/phpunit/includes/MessageTest.php
2 files changed, 14 insertions(+), 5 deletions(-)

Approvals:
  Gergő Tisza: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/Message.php b/includes/Message.php
index 8ac73b3..303a4b9 100644
--- a/includes/Message.php
+++ b/includes/Message.php
@@ -384,21 +384,29 @@
 
        /**
         * Transform a MessageSpecifier or a primitive value used 
interchangeably with
-        * specifiers (a message key string, or a key + params array) into a 
proper Message
+        * specifiers (a message key string, or a key + params array) into a 
proper Message.
+        *
+        * Also accepts a MessageSpecifier inside an array: that's not 
considered a valid format
+        * but is an easy error to make due to how StatusValue stores messages 
internally.
+        * Further array elements are ignored in that case.
+        *
         * @param string|array|MessageSpecifier $value
         * @return Message
         * @throws InvalidArgumentException
         */
        public static function newFromSpecifier( $value ) {
+               $params = [];
+               if ( is_array( $value ) ) {
+                       $params = $value;
+                       $value = array_shift( $params );
+               }
+
                if ( $value instanceof RawMessage ) {
                        $message = new RawMessage( $value->getKey(), 
$value->getParams() );
                } elseif ( $value instanceof MessageSpecifier ) {
                        $message = new Message( $value );
-               } elseif ( is_array( $value ) ) {
-                       $key = array_shift( $value );
-                       $message = new Message( $key, $value );
                } elseif ( is_string( $value ) ) {
-                       $message = new Message( $value );
+                       $message = new Message( $value, $params );
                } else {
                        throw new InvalidArgumentException( __METHOD__ . ': 
invalid argument type '
                                . gettype( $value ) );
diff --git a/tests/phpunit/includes/MessageTest.php 
b/tests/phpunit/includes/MessageTest.php
index 224b0cb..8aa1361 100644
--- a/tests/phpunit/includes/MessageTest.php
+++ b/tests/phpunit/includes/MessageTest.php
@@ -603,6 +603,7 @@
                        'Message' => [ new Message( 'youhavenewmessages', [ 
'foo', 'bar' ] ), 'You have foo (bar).' ],
                        'RawMessage' => [ new RawMessage( 'foo ($1)', [ 'bar' ] 
), 'foo (bar)' ],
                        'MessageSpecifier' => [ $messageSpecifier, 'Main Page' 
],
+                       'nested RawMessage' => [ [ new RawMessage( 'foo ($1)', 
[ 'bar' ] ) ], 'foo (bar)' ],
                ];
        }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/293772
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I346b35e08bd38ce231e16d0616438ea408b55bff
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: REL1_27
Gerrit-Owner: Gergő Tisza <gti...@wikimedia.org>
Gerrit-Reviewer: Gergő Tisza <gti...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to