jenkins-bot has submitted this change and it was merged. Change subject: Catch EntityIdParsingExceptions in wbgetclaims ......................................................................
Catch EntityIdParsingExceptions in wbgetclaims Bug: 65095 Change-Id: I7cc5e7e122f0b9504f77ce9a05a23b033c5cf542 --- M repo/includes/api/GetClaims.php M repo/tests/phpunit/includes/api/GetClaimsTest.php 2 files changed, 49 insertions(+), 6 deletions(-) Approvals: WikidataJenkins: Verified Daniel Kinzler: Looks good to me, approved jenkins-bot: Verified diff --git a/repo/includes/api/GetClaims.php b/repo/includes/api/GetClaims.php index c2b6d2a..f350761 100644 --- a/repo/includes/api/GetClaims.php +++ b/repo/includes/api/GetClaims.php @@ -4,6 +4,7 @@ use ApiBase; use ApiMain; +use Wikibase\DataModel\Entity\EntityIdParsingException; use Wikibase\DataModel\Claim\Claim; use Wikibase\DataModel\Claim\ClaimGuidParser; use Wikibase\DataModel\Claim\Claims; @@ -63,7 +64,12 @@ list( $id, $claimGuid ) = $this->getIdentifiers( $params ); - $entityId = $this->idParser->parse( $id ); + try { + $entityId = $this->idParser->parse( $id ); + } catch ( EntityIdParsingException $e ) { + $this->dieException( $e, 'param-invalid' ); + } + $entityRevision = $entityId ? $this->loadEntityRevision( $entityId ) : null; $entity = $entityRevision->getEntity(); @@ -151,7 +157,12 @@ $params = $this->extractRequestParams(); if ( isset( $params['property'] ) ){ - $parsedProperty = $this->idParser->parse( $params['property'] ); + try { + $parsedProperty = $this->idParser->parse( $params['property'] ); + } catch ( EntityIdParsingException $e ) { + $this->dieException( $e, 'param-invalid' ); + } + $matchFilter = $propertyId->equals( $parsedProperty ); return $matchFilter; } diff --git a/repo/tests/phpunit/includes/api/GetClaimsTest.php b/repo/tests/phpunit/includes/api/GetClaimsTest.php index 3ed6e6d..accb60b 100644 --- a/repo/tests/phpunit/includes/api/GetClaimsTest.php +++ b/repo/tests/phpunit/includes/api/GetClaimsTest.php @@ -13,6 +13,7 @@ use Wikibase\Lib\Serializers\SerializationOptions; use Wikibase\Lib\Serializers\SerializerFactory; use Wikibase\DataModel\Entity\Property; +use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Snak\PropertySomeValueSnak; use Wikibase\DataModel\Snak\PropertyValueSnak; @@ -49,10 +50,10 @@ $store->saveEntity( $entity, '', $GLOBALS['wgUser'], EDIT_NEW ); /** @var $claims Claim[] */ - $claims[0] = $entity->newClaim( new PropertyNoValueSnak( 42 ) ); - $claims[1] = $entity->newClaim( new PropertyNoValueSnak( 1 ) ); - $claims[2] = $entity->newClaim( new PropertySomeValueSnak( 42 ) ); - $claims[3] = $entity->newClaim( new PropertyValueSnak( 9001, new StringValue( 'o_O' ) ) ); + $claims[0] = $entity->newClaim( new PropertyNoValueSnak( new PropertyId( 'P42' ) ) ); + $claims[1] = $entity->newClaim( new PropertyNoValueSnak( new PropertyId( 'P404' ) ) ); + $claims[2] = $entity->newClaim( new PropertySomeValueSnak( new PropertyId( 'P42' ) ) ); + $claims[3] = $entity->newClaim( new PropertyValueSnak( new PropertyId( 'P9001' ), new StringValue( 'o_O' ) ) ); foreach( $claims as $key => $claim ){ $claim->setGuid( $entity->getId()->getPrefixedId() . '$D8404CDA-56A1-4334-AF13-A3290BCD9CL' . $key ); @@ -185,4 +186,35 @@ array( 'x$y$z' ) ); } + + /** + * @dataProvider getInvalidIdsProvider + */ + public function testGetInvalidIds( $entity, $property ) { + if ( !$entity ) { + $item = Item::newEmpty(); + $this->addClaimsAndSave( $item ); + $entity = $item->getId()->getSerialization(); + } + + $params = array( + 'action' => 'wbgetclaims', + 'entity' => $entity, + 'property' => $property, + ); + + try { + $this->doApiRequest( $params ); + $this->fail( 'Invalid entity id did not throw an error' ); + } catch ( UsageException $e ) { + $this->assertEquals( 'param-invalid', $e->getCodeString(), 'Invalid entity id raised correct error' ); + } + } + + public function getInvalidIdsProvider() { + return array( + array( null, 'nopeNopeNope' ), + array( 'whatTheFuck', 'P42' ), + ); + } } -- To view, visit https://gerrit.wikimedia.org/r/133160 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I7cc5e7e122f0b9504f77ce9a05a23b033c5cf542 Gerrit-PatchSet: 7 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Hoo man <h...@online.de> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Hoo man <h...@online.de> Gerrit-Reviewer: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de> Gerrit-Reviewer: WikidataJenkins <wikidata-servi...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits