diff --git a/core/Exception/InvalidRequestParameterException.php b/core/Exception/InvalidRequestParameterException.php new file mode 100644 index 0000000000000000000000000000000000000000..13ead2e71640df2ad47cda9323c4d01b9bb782ec --- /dev/null +++ b/core/Exception/InvalidRequestParameterException.php @@ -0,0 +1,13 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Exception; + +class InvalidRequestParameterException extends Exception +{ +} \ No newline at end of file diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php index 110d0eb65d4af87bdd85868eb0c45f68805e1632..efc3f331d97b932bd3d7af14f5eb51988147e956 100644 --- a/core/Tracker/Request.php +++ b/core/Tracker/Request.php @@ -12,6 +12,8 @@ use Exception; use Piwik\Common; use Piwik\Config; use Piwik\Cookie; +use Piwik\Exception\InvalidRequestParameterException; +use Piwik\Exception\InvalidVisitorIdException; use Piwik\Exception\UnexpectedWebsiteFoundException; use Piwik\IP; use Piwik\Network\IPUtils; @@ -304,7 +306,7 @@ class Request ); if (!isset($supportedParams[$name])) { - throw new Exception("Requested parameter $name is not a known Tracking API Parameter."); + throw new InvalidRequestParameterException("Requested parameter $name is not a known Tracking API Parameter."); } $paramDefaultValue = $supportedParams[$name][0]; @@ -524,7 +526,7 @@ class Request $idVisitor = $this->getForcedVisitorId(); if (!empty($idVisitor)) { if (strlen($idVisitor) != Tracker::LENGTH_HEX_ID_STRING) { - throw new Exception("Visitor ID (cid) $idVisitor must be " . Tracker::LENGTH_HEX_ID_STRING . " characters long"); + throw new InvalidRequestParameterException("Visitor ID (cid) $idVisitor must be " . Tracker::LENGTH_HEX_ID_STRING . " characters long"); } Common::printDebug("Request will be recorded for this idvisitor = " . $idVisitor); $found = true; diff --git a/tests/PHPUnit/System/TrackerTest.php b/tests/PHPUnit/System/TrackerTest.php index baba28e7631c2443da61f08e94884ecd3aff6968..84f5db3aac3010ecb0820cfe0f7f62f9c0ce2319 100755 --- a/tests/PHPUnit/System/TrackerTest.php +++ b/tests/PHPUnit/System/TrackerTest.php @@ -85,4 +85,13 @@ class TrackerTest extends SystemTestCase $this->assertResponseCode(400, $url); } + public function test_response_ShouldSend400ResponseCode_IfInvalidRequestParameterIsGiven() + { + $url = $this->tracker->getUrlTrackPageView('Test'); + $url .= '&cid=' . str_pad('1', 16, '1'); + + $this->assertResponseCode(200, $url); + $this->assertResponseCode(400, $url . '1'); // has to be 16 char, but is 17 now + } + }