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

Reply via email to