aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiemo Kreuz <thiemo.kreuz@wikimedia.de>2020-05-29 10:37:05 +0200
committerThiemo Kreuz (WMDE) <thiemo.kreuz@wikimedia.de>2020-05-29 09:37:03 +0000
commite111220a39d86f2c56566e8cc6a84429d928638c (patch)
treef8c2fde8ff67c9b420fe80f2210c5dde9d5ffb1f
parentbbce47b29de1587eb2dba2d2cdd4ebd5df1ed52e (diff)
downloadmediawikicore-e111220a39d86f2c56566e8cc6a84429d928638c.tar.gz
mediawikicore-e111220a39d86f2c56566e8cc6a84429d928638c.zip
upload: Modernize callback code to make use of PHP7 syntax
* Update the two "processing_instruction_handler" and "external_dtd_handler" callbacks to use a syntax for the callback that doesn't stuff the class name in a string, but actually references the class. * We don't need call_user_func() in modern PHP7 any more. * Add and update a few type hints in UploadBase to make the code easier explorable. Change-Id: I0ab3cfbe4f0bf15b1da4ab10fd9ffc1986d968d0
-rw-r--r--includes/libs/mime/XmlTypeCheck.php16
-rw-r--r--includes/upload/UploadBase.php13
-rw-r--r--tests/phpunit/includes/upload/UploadBaseTest.php4
3 files changed, 14 insertions, 19 deletions
diff --git a/includes/libs/mime/XmlTypeCheck.php b/includes/libs/mime/XmlTypeCheck.php
index 3bd7a563fb55..2e0f0c8fd3c6 100644
--- a/includes/libs/mime/XmlTypeCheck.php
+++ b/includes/libs/mime/XmlTypeCheck.php
@@ -325,12 +325,7 @@ class XmlTypeCheck {
$callbackReturn = false;
if ( is_callable( $this->filterCallback ) ) {
- $callbackReturn = call_user_func(
- $this->filterCallback,
- $name,
- $attribs,
- $data
- );
+ $callbackReturn = ( $this->filterCallback )( $name, $attribs, $data );
}
if ( $callbackReturn ) {
// Filter hit!
@@ -354,8 +349,8 @@ class XmlTypeCheck {
private function processingInstructionHandler( $target, $data ) {
$callbackReturn = false;
if ( $this->parserOptions['processing_instruction_handler'] ) {
- $callbackReturn = call_user_func(
- $this->parserOptions['processing_instruction_handler'],
+ // @phan-suppress-next-line PhanTypeInvalidCallable false positive
+ $callbackReturn = $this->parserOptions['processing_instruction_handler'](
$target,
$data
);
@@ -383,7 +378,7 @@ class XmlTypeCheck {
$callbackReturn = false;
if ( $generalCallback ) {
- $callbackReturn = call_user_func( $generalCallback, $dtd );
+ $callbackReturn = $generalCallback( $dtd );
}
if ( $callbackReturn ) {
// Filter hit!
@@ -394,8 +389,7 @@ class XmlTypeCheck {
$parsedDTD = $this->parseDTD( $dtd );
if ( $externalCallback && isset( $parsedDTD['type'] ) ) {
- $callbackReturn = call_user_func(
- $externalCallback,
+ $callbackReturn = $externalCallback(
$parsedDTD['type'],
$parsedDTD['publicid'] ?? null,
$parsedDTD['systemid'] ?? null
diff --git a/includes/upload/UploadBase.php b/includes/upload/UploadBase.php
index d39a6310ed1a..653b97c78127 100644
--- a/includes/upload/UploadBase.php
+++ b/includes/upload/UploadBase.php
@@ -175,7 +175,7 @@ abstract class UploadBase {
*
* @param WebRequest &$request
* @param string|null $type
- * @return null|UploadBase
+ * @return null|self
*/
public static function createFromRequest( &$request, $type = null ) {
$type = $type ?: $request->getVal( 'wpSourceType', 'File' );
@@ -188,6 +188,7 @@ abstract class UploadBase {
$type = ucfirst( $type );
// Give hooks the chance to handle this request
+ /** @var self|null $className */
$className = null;
Hooks::run( 'UploadCreateFromRequest', [ $type, &$className ] );
if ( $className === null ) {
@@ -199,16 +200,16 @@ abstract class UploadBase {
}
// Check whether this upload class is enabled
- if ( !call_user_func( [ $className, 'isEnabled' ] ) ) {
+ if ( !$className::isEnabled() ) {
return null;
}
// Check whether the request is valid
- if ( !call_user_func( [ $className, 'isValidRequest' ], $request ) ) {
+ if ( !$className::isValidRequest( $request ) ) {
return null;
}
- /** @var UploadBase $handler */
+ /** @var self $handler */
$handler = new $className;
$handler->initializeFromRequest( $request );
@@ -1483,8 +1484,8 @@ abstract class UploadBase {
[ $this, 'checkSvgScriptCallback' ],
true,
[
- 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback',
- 'external_dtd_handler' => 'UploadBase::checkSvgExternalDTD',
+ 'processing_instruction_handler' => [ __CLASS__, 'checkSvgPICallback' ],
+ 'external_dtd_handler' => [ __CLASS__, 'checkSvgExternalDTD' ],
]
);
if ( $check->wellFormed !== true ) {
diff --git a/tests/phpunit/includes/upload/UploadBaseTest.php b/tests/phpunit/includes/upload/UploadBaseTest.php
index bcc6452c4aeb..0bfdd41ac9a7 100644
--- a/tests/phpunit/includes/upload/UploadBaseTest.php
+++ b/tests/phpunit/includes/upload/UploadBaseTest.php
@@ -647,8 +647,8 @@ class UploadTestHandler extends UploadBase {
[ $this, 'checkSvgScriptCallback' ],
false,
[
- 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback',
- 'external_dtd_handler' => 'UploadBase::checkSvgExternalDTD'
+ 'processing_instruction_handler' => [ UploadBase::class, 'checkSvgPICallback' ],
+ 'external_dtd_handler' => [ UploadBase::class, 'checkSvgExternalDTD' ],
]
);
return [ $check->wellFormed, $check->filterMatch ];