diff options
author | jenkins-bot <jenkins-bot@gerrit.wikimedia.org> | 2021-05-07 16:15:04 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@wikimedia.org> | 2021-05-07 16:15:04 +0000 |
commit | 8ff25e40bbe14c5a695d5bb8c2db4dacf2de9341 (patch) | |
tree | bb4159de9919d26aacb44543deb453a80db636eb /includes | |
parent | 56432869e384c445a9dbe3d8e177c0398078f1a3 (diff) | |
parent | 316053ed880066abfb6ebdb4af597133a73518ab (diff) | |
download | mediawikicore-8ff25e40bbe14c5a695d5bb8c2db4dacf2de9341.tar.gz mediawikicore-8ff25e40bbe14c5a695d5bb8c2db4dacf2de9341.zip |
Merge "LinkBatch: skip bad input"
Diffstat (limited to 'includes')
-rw-r--r-- | includes/cache/LinkBatch.php | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/includes/cache/LinkBatch.php b/includes/cache/LinkBatch.php index 620f4c1e9340..af691bb63d3d 100644 --- a/includes/cache/LinkBatch.php +++ b/includes/cache/LinkBatch.php @@ -23,6 +23,7 @@ use MediaWiki\Cache\CacheKeyHelper; use MediaWiki\Linker\LinkTarget; +use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; use MediaWiki\Page\PageIdentity; use MediaWiki\Page\PageIdentityValue; @@ -130,6 +131,16 @@ class LinkBatch { * @param LinkTarget|PageReference $link */ public function addObj( $link ) { + if ( !$link ) { + // Don't die if we got null, just skip. There is nothing to do anyway. + // For now, let's avoid things like T282180. We should be more strict in the future. + LoggerFactory::getInstance( 'LinkBatch' )->warning( + 'Skipping null link, probably due to a bad title.', + [ 'trace' => wfBacktrace( true ) ] + ); + return; + } + Assert::parameterType( [ LinkTarget::class, PageReference::class ], $link, '$link' ); $this->add( $link->getNamespace(), $link->getDBkey() ); } @@ -240,8 +251,9 @@ class LinkBatch { $ids = []; $remaining = $this->data; foreach ( $res as $row ) { - $title = TitleValue::tryNew( (int)$row->page_namespace, $row->page_title ); - if ( $title ) { + try { + $title = new TitleValue( (int)$row->page_namespace, $row->page_title ); + $cache->addGoodLinkObjFromRow( $title, $row ); $pdbk = $this->titleFormatter->getPrefixedDBkey( $title ); $ids[$pdbk] = $row->page_id; @@ -255,9 +267,11 @@ class LinkBatch { $key = CacheKeyHelper::getKeyForPage( $pageIdentity ); $this->pageIdentities[$key] = $pageIdentity; - } else { - wfLogWarning( __METHOD__ . ': encountered invalid title: ' . - $row->page_namespace . '-' . $row->page_title ); + } catch ( InvalidArgumentException $ex ) { + LoggerFactory::getInstance( 'LinkBatch' )->warning( + 'Encountered invalid title', + [ 'title_namespace' => $row->page_namespace, 'title_dbkey' => $row->page_title ] + ); } unset( $remaining[$row->page_namespace][$row->page_title] ); @@ -266,8 +280,9 @@ class LinkBatch { // The remaining links in $data are bad links, register them as such foreach ( $remaining as $ns => $dbkeys ) { foreach ( $dbkeys as $dbkey => $unused ) { - $title = TitleValue::tryNew( (int)$ns, (string)$dbkey ); - if ( $title ) { + try { + $title = new TitleValue( (int)$ns, (string)$dbkey ); + $cache->addBadLinkObj( $title ); $pdbk = $this->titleFormatter->getPrefixedDBkey( $title ); $ids[$pdbk] = 0; @@ -275,8 +290,11 @@ class LinkBatch { $pageIdentity = new PageIdentityValue( 0, (int)$ns, $dbkey, PageIdentity::LOCAL ); $key = CacheKeyHelper::getKeyForPage( $pageIdentity ); $this->pageIdentities[$key] = $pageIdentity; - } else { - wfLogWarning( __METHOD__ . ': encountered invalid title: ' . $ns . '-' . $dbkey ); + } catch ( InvalidArgumentException $ex ) { + LoggerFactory::getInstance( 'LinkBatch' )->warning( + 'Encountered invalid title', + [ 'title_namespace' => $ns, 'title_dbkey' => $dbkey ] + ); } } } |