From 011b458627db0c6832a7b8ef98b5fc87868ab82a Mon Sep 17 00:00:00 2001 From: Sam Smith Date: Wed, 27 Dec 2017 14:17:04 +0000 Subject: [PATCH] Revision: Handle all return values of Title::newFromId In Revision::getKnownCurrent, fail early when Title::newFromId returns null to avoid an uncatchable fatal error being triggered. RevisionStore#getKnownCurrentRevision requires that the title parameter be an instance of Title. This follows on from Ia4c20a91. Change-Id: I9bddafcc5df630d1dff1e2526194186cab7097e5 --- includes/Revision.php | 4 ++++ tests/phpunit/includes/RevisionDbTestBase.php | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/includes/Revision.php b/includes/Revision.php index 8f36e88fbe..b8b56a3f39 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -1204,6 +1204,10 @@ class Revision implements IDBAccessObject { ? $pageIdOrTitle : Title::newFromID( $pageIdOrTitle ); + if ( !$title ) { + return false; + } + $record = self::getRevisionStore()->getKnownCurrentRevision( $title, $revId ); return $record ? new Revision( $record ) : false; } diff --git a/tests/phpunit/includes/RevisionDbTestBase.php b/tests/phpunit/includes/RevisionDbTestBase.php index 9ab76c8832..bd0dea6191 100644 --- a/tests/phpunit/includes/RevisionDbTestBase.php +++ b/tests/phpunit/includes/RevisionDbTestBase.php @@ -1363,6 +1363,24 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase { $this->assertEquals( $rev->getId(), $cachedRow->rev_id ); } + public function testNewKnownCurrent_withPageId() { + $db = wfGetDB( DB_MASTER ); + + $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ ); + $rev = $this->testPage->getRevision(); + + $pageId = $this->testPage->getId(); + + $newRev = Revision::newKnownCurrent( $db, $pageId, $rev->getId() ); + $this->assertRevEquals( $rev, $newRev ); + } + + public function testNewKnownCurrent_returnsFalseWhenTitleDoesntExist() { + $db = wfGetDB( DB_MASTER ); + + $this->assertFalse( Revision::newKnownCurrent( $db, 0 ) ); + } + public function provideUserCanBitfield() { yield [ 0, 0, [], null, true ]; // Bitfields match, user has no permissions -- 2.20.1