ignore API parameters in array notation

PHP automatically parses parameters in an array notation(foo[]) into
array types. Ignore these parameters as 'unknown'.

Fixes #2763.
This commit is contained in:
Sarah Hoffmann
2022-07-23 10:51:44 +02:00
parent 1bee151fe3
commit cd4bcea894
3 changed files with 22 additions and 9 deletions

View File

@@ -22,7 +22,10 @@ class ParameterParser
public function getBool($sName, $bDefault = false) public function getBool($sName, $bDefault = false)
{ {
if (!isset($this->aParams[$sName]) || strlen($this->aParams[$sName]) == 0) { if (!isset($this->aParams[$sName])
|| !is_string($this->aParams[$sName])
|| strlen($this->aParams[$sName]) == 0
) {
return $bDefault; return $bDefault;
} }
@@ -31,7 +34,7 @@ class ParameterParser
public function getInt($sName, $bDefault = false) public function getInt($sName, $bDefault = false)
{ {
if (!isset($this->aParams[$sName])) { if (!isset($this->aParams[$sName]) || is_array($this->aParams[$sName])) {
return $bDefault; return $bDefault;
} }
@@ -44,7 +47,7 @@ class ParameterParser
public function getFloat($sName, $bDefault = false) public function getFloat($sName, $bDefault = false)
{ {
if (!isset($this->aParams[$sName])) { if (!isset($this->aParams[$sName]) || is_array($this->aParams[$sName])) {
return $bDefault; return $bDefault;
} }
@@ -57,7 +60,10 @@ class ParameterParser
public function getString($sName, $bDefault = false) public function getString($sName, $bDefault = false)
{ {
if (!isset($this->aParams[$sName]) || strlen($this->aParams[$sName]) == 0) { if (!isset($this->aParams[$sName])
|| !is_string($this->aParams[$sName])
|| strlen($this->aParams[$sName]) == 0
) {
return $bDefault; return $bDefault;
} }
@@ -66,7 +72,10 @@ class ParameterParser
public function getSet($sName, $aValues, $sDefault = false) public function getSet($sName, $aValues, $sDefault = false)
{ {
if (!isset($this->aParams[$sName]) || strlen($this->aParams[$sName]) == 0) { if (!isset($this->aParams[$sName])
|| !is_string($this->aParams[$sName])
|| strlen($this->aParams[$sName]) == 0
) {
return $sDefault; return $sDefault;
} }

View File

@@ -368,3 +368,10 @@ Feature: Search queries
| Triesenberg | | Triesenberg |
Scenario: Array parameters are ignored
When sending json search query "Vaduz" with address
| countrycodes[] | polygon_svg[] | limit[] | polygon_threshold[] |
| IT | 1 | 3 | 3.4 |
Then result addresses contain
| ID | country_code |
| 0 | li |

View File

@@ -137,9 +137,6 @@ class ParameterParserTest extends \PHPUnit\Framework\TestCase
public function testGetSet() public function testGetSet()
{ {
$this->expectException(\Exception::class);
$this->expectExceptionMessage("Parameter 'val3' must be one of: foo, bar");
$oParams = new ParameterParser(array( $oParams = new ParameterParser(array(
'val1' => 'foo', 'val1' => 'foo',
'val2' => '', 'val2' => '',
@@ -151,7 +148,7 @@ class ParameterParserTest extends \PHPUnit\Framework\TestCase
$this->assertSame('foo', $oParams->getSet('val1', array('foo', 'bar'))); $this->assertSame('foo', $oParams->getSet('val1', array('foo', 'bar')));
$this->assertSame(false, $oParams->getSet('val2', array('foo', 'bar'))); $this->assertSame(false, $oParams->getSet('val2', array('foo', 'bar')));
$oParams->getSet('val3', array('foo', 'bar')); $this->assertSame(false, $oParams->getSet('val3', array('foo', 'bar')));
} }