These two classes do something like:
[ $pageContinue, $entityContinue, $aspectContinue ] = explode( '|', $continueParam, 3 );
which produces a PHP warning if the continue parameter isn’t in the expected format. Reasonably harmless, but we should still fix it.
wblistentityusage request URL and Logstash:
PHP Notice: Undefined offset: 1
from /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiListEntityUsage.php(198)
#0 /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiListEntityUsage.php(198): MWExceptionHandler::handleError(integer, string, string, integer, array)
#1 /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiListEntityUsage.php(180): Wikibase\Client\Api\ApiListEntityUsage->addContinue(string)
#2 /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiListEntityUsage.php(53): Wikibase\Client\Api\ApiListEntityUsage->doQuery(array, NULL)
#3 /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiListEntityUsage.php(48): Wikibase\Client\Api\ApiListEntityUsage->run()
#4 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiQuery.php(671): Wikibase\Client\Api\ApiListEntityUsage->execute()
#5 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiMain.php(1903): ApiQuery->execute()
#6 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiMain.php(878): ApiMain->executeAction()
#7 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiMain.php(849): ApiMain->executeActionWithErrorHandling()
#8 /srv/mediawiki/php-1.40.0-wmf.8/api.php(90): ApiMain->execute()
#9 /srv/mediawiki/php-1.40.0-wmf.8/api.php(45): wfApiMain()
#10 /srv/mediawiki/w/api.php(3): require(string)
#11 {main}wbpropsentityusage request URL and Logstash:
PHP Notice: Undefined offset: 1
from /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiPropsEntityUsage.php(129)
#0 /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiPropsEntityUsage.php(129): MWExceptionHandler::handleError(integer, string, string, integer, array)
#1 /srv/mediawiki/php-1.40.0-wmf.8/extensions/Wikibase/client/includes/Api/ApiPropsEntityUsage.php(38): Wikibase\Client\Api\ApiPropsEntityUsage->doQuery(array)
#2 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiQuery.php(671): Wikibase\Client\Api\ApiPropsEntityUsage->execute()
#3 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiMain.php(1903): ApiQuery->execute()
#4 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiMain.php(878): ApiMain->executeAction()
#5 /srv/mediawiki/php-1.40.0-wmf.8/includes/api/ApiMain.php(849): ApiMain->executeActionWithErrorHandling()
#6 /srv/mediawiki/php-1.40.0-wmf.8/api.php(90): ApiMain->execute()
#7 /srv/mediawiki/php-1.40.0-wmf.8/api.php(45): wfApiMain()
#8 /srv/mediawiki/w/api.php(3): require(string)
#9 {main}Steps to reproduce:
- have error_reporting( E_ALL ); and ini_set( 'display_errors', 1 ); in your LocalSettings.php
- visit one of these URLs on your local wiki:
- api.php?action=query&list=wblistentityusage&wbleuentities=Q1&wbleucontinue=-
- api.php?action=query&prop=wbentityusage&titles=Q1&wbeucontinue=- (you might need to change Q1 to Item:Q1 or another title – needs to be the title for an existing item’s page)
- (the lack of &format=json is important – the warnings are only visible if the HTML representation is shown)
Acceptance criteria:
- neither of the two URLs listed above produces a warning anymore
Note: ListSubscribers does it like this instead:
$continueParams = explode( '|', $continueParam );
if ( count( $continueParams ) !== 2 ) {
$this->errorReporter->dieError(
'Unable to parse continue param',
'param-invalid'
);
}
$entityContinueSql = $db->addQuotes( $continueParams[0] );
$wikiContinueSql = $db->addQuotes( $continueParams[1] );