Allow PHP version check to execute on older versions of PHP
authorBill Pirkle <bpirkle@wikimedia.org>
Thu, 11 Jul 2019 02:16:49 +0000 (21:16 -0500)
committerBill Pirkle <bpirkle@wikimedia.org>
Thu, 11 Jul 2019 03:39:45 +0000 (22:39 -0500)
A change to update.php used the null coalesce (??) operator.
While this is normally fine, the code in question executes
before the PHP version check, and causes an unfriendly PHP
error rather than the intended helpful error. Use the older-style
isset() call instead, so that the PHP version check will get
a chance to execute.

Bug: T213893
Change-Id: I22e4a24bed9e0b29e08afc7b9468e7bfd81d7d57

maintenance/update.php

index fe40536..73edda9 100755 (executable)
@@ -247,17 +247,26 @@ class UpdateMediaWiki extends Maintenance {
                ];
        }
 
                ];
        }
 
+       /**
+        * @throws FatalError
+        * @throws MWException
+        * @suppress PhanPluginDuplicateConditionalNullCoalescing
+        */
        public function validateParamsAndArgs() {
                // Allow extensions to add additional params.
                $params = [];
                Hooks::run( 'MaintenanceUpdateAddParams', [ &$params ] );
        public function validateParamsAndArgs() {
                // Allow extensions to add additional params.
                $params = [];
                Hooks::run( 'MaintenanceUpdateAddParams', [ &$params ] );
+
+               // This executes before the PHP version check, so don't use null coalesce (??).
+               // Keeping this compatible with older PHP versions lets us reach the code that
+               // displays a more helpful error.
                foreach ( $params as $name => $param ) {
                        $this->addOption(
                                $name,
                                $param['desc'],
                foreach ( $params as $name => $param ) {
                        $this->addOption(
                                $name,
                                $param['desc'],
-                               $param['require'] ?? false,
-                               $param['withArg'] ?? false,
-                               $param['shortName'] ?? false,
+                               isset( $param['require'] ) ? $param['require'] : false,
+                               isset( $param['withArg'] ) ? $param['withArg'] : false,
+                               isset( $param['shortName'] ) ? $param['shortName'] : false,
                                $param['multiOccurrence'] ?? false
                        );
                }
                                $param['multiOccurrence'] ?? false
                        );
                }