diff --git a/library/Icinga/Data/Filter/FilterExpression.php b/library/Icinga/Data/Filter/FilterExpression.php index 5b580fa38..8ef1e5076 100644 --- a/library/Icinga/Data/Filter/FilterExpression.php +++ b/library/Icinga/Data/Filter/FilterExpression.php @@ -12,7 +12,6 @@ class FilterExpression extends Filter public function __construct($column, $sign, $expression) { $column = trim($column); - $expression = is_array($expression) ? array_map('trim', $expression) : trim($expression); $this->column = $column; $this->sign = $sign; $this->expression = $expression; diff --git a/library/Icinga/Web/Widget/FilterEditor.php b/library/Icinga/Web/Widget/FilterEditor.php index 63293050c..16c396f85 100644 --- a/library/Icinga/Web/Widget/FilterEditor.php +++ b/library/Icinga/Web/Widget/FilterEditor.php @@ -231,10 +231,11 @@ class FilterEditor extends AbstractWidget if ($searchCol === null) { throw new Exception('Cannot search here'); } + $search = ltrim($search); $filter = $this->mergeRootExpression($filter, $searchCol, '=', "*$search*"); } else { list($k, $v) = preg_split('/=/', $search); - $filter = $this->mergeRootExpression($filter, $k, '=', $v); + $filter = $this->mergeRootExpression($filter, trim($k), '=', ltrim($v)); } } else { if (false === $this->resetSearchColumns($filter)) { @@ -242,6 +243,7 @@ class FilterEditor extends AbstractWidget } $filters = array(); + $search = ltrim($search); foreach ($this->searchColumns as $searchColumn) { $filters[] = Filter::expression($searchColumn, '=', "*$search*"); } diff --git a/test/php/library/Icinga/Data/Filter/FilterTest.php b/test/php/library/Icinga/Data/Filter/FilterTest.php index e14decb20..8080d47f7 100644 --- a/test/php/library/Icinga/Data/Filter/FilterTest.php +++ b/test/php/library/Icinga/Data/Filter/FilterTest.php @@ -198,16 +198,53 @@ class FilterTest extends BaseTestCase $this->assertNotEquals((string) $c, (string) $d); } - public function testLeadingAndTrailingWhitespacesSanitizing() + public function testLeadingAndTrailingWhitespaces() { - $columnHasWhitespaces = Filter::where(' host ', 'localhost'); - $expressionHasWhitespaces = Filter::where('host', ' localhost '); - $bothHaveWhitespaces = Filter::fromQueryString(' host = localhost '); - $withArray = Filter::where(' host ', array(' no match ', ' localhost ')); - $this->assertTrue($columnHasWhitespaces->matches($this->sampleData[0])); - $this->assertTrue($expressionHasWhitespaces->matches($this->sampleData[0])); - $this->assertTrue($bothHaveWhitespaces->matches($this->sampleData[0])); - $this->assertTrue($withArray->matches($this->sampleData[0])); + $columnWithWhitespaces = Filter::where(' host ', 'localhost'); + $this->assertTrue($columnWithWhitespaces->matches((object) array( + 'host' => 'localhost' + )), + 'Filter doesn\'t remove leading and trailing whitespaces from columns' + ); + $expressionWithLeadingWhitespaces = Filter::where('host', ' localhost'); + $this->assertTrue($expressionWithLeadingWhitespaces->matches((object) array( + 'host' => ' localhost' + )), + 'Filter doesn\'t take leading whitespaces of expressions into account' + ); + $this->assertFalse($expressionWithLeadingWhitespaces->matches((object) array( + 'host' => ' localhost ' + )), + 'Filter doesn\'t take trailing whitespaces of expressions into account' + ); + $expressionWithTrailingWhitespaces = Filter::where('host', 'localhost '); + $this->assertTrue($expressionWithTrailingWhitespaces->matches((object) array( + 'host' => 'localhost ' + )), + 'Filter doesn\'t take trailing whitespaces of expressions into account' + ); + $this->assertFalse($expressionWithTrailingWhitespaces->matches((object) array( + 'host' => ' localhost ' + )), + 'Filter doesn\'t take leading whitespaces of expressions into account' + ); + $expressionWithLeadingAndTrailingWhitespaces = Filter::where('host', ' localhost '); + $this->assertTrue($expressionWithLeadingAndTrailingWhitespaces->matches((object) array( + 'host' => ' localhost ' + )), + 'Filter doesn\'t take leading and trailing whitespaces of expressions into account' + ); + $this->assertFalse($expressionWithLeadingAndTrailingWhitespaces->matches((object) array( + 'host' => ' localhost ' + )), + 'Filter doesn\'t take leading and trailing whitespaces of expressions into account' + ); + $queryStringWithWhitespaces = Filter::fromQueryString(' host = localhost '); + $this->assertTrue($queryStringWithWhitespaces->matches((object) array( + 'host' => ' localhost ' + )), + 'Filter doesn\'t take leading and trailing whitespaces of expressions in query strings into account' + ); } private function row($idx)