From a74b6f9125b5c6eb492b256a62039c59b64cfdf8 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Thu, 17 Jul 2025 15:51:38 +0200 Subject: [PATCH 1/2] Improve error handling of filter parameters in grid/list views --- .../gridView/AbstractGridView.class.php | 30 ++++++++++++++----- .../gridView/filter/CategoryFilter.class.php | 7 ++++- .../gridView/filter/DateFilter.class.php | 2 +- .../filter/InvalidFilterValue.class.php | 13 ++++++++ .../gridView/filter/NumericFilter.class.php | 2 +- .../gridView/filter/SelectFilter.class.php | 4 +++ .../gridView/filter/TimeFilter.class.php | 2 +- .../gridView/filter/UserFilter.class.php | 7 ++++- .../listView/AbstractListView.class.php | 23 +++++++++++--- .../listView/filter/CategoryFilter.class.php | 5 ++++ .../listView/filter/DateFilter.class.php | 2 +- .../filter/InvalidFilterValue.class.php | 13 ++++++++ .../listView/filter/LabelFilter.class.php | 7 ++++- .../listView/filter/NumericFilter.class.php | 2 +- .../listView/filter/SelectFilter.class.php | 4 +++ .../listView/filter/TimeFilter.class.php | 2 +- .../listView/filter/UserFilter.class.php | 5 ++++ 17 files changed, 109 insertions(+), 21 deletions(-) create mode 100644 wcfsetup/install/files/lib/system/gridView/filter/InvalidFilterValue.class.php create mode 100644 wcfsetup/install/files/lib/system/listView/filter/InvalidFilterValue.class.php diff --git a/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php b/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php index ee322b79a7a..bf0cf41c6f9 100644 --- a/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php +++ b/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php @@ -2,12 +2,12 @@ namespace wcf\system\gridView; -use LogicException; use wcf\action\GridViewFilterAction; use wcf\data\DatabaseObject; use wcf\data\DatabaseObjectList; use wcf\event\IPsr14Event; use wcf\system\event\EventHandler; +use wcf\system\gridView\filter\InvalidFilterValue; use wcf\system\interaction\bulk\IBulkInteractionProvider; use wcf\system\interaction\IInteraction; use wcf\system\interaction\IInteractionProvider; @@ -567,15 +567,15 @@ public function getFilterLabel(string $id): string { $column = $this->getColumn($id); if (!$column) { - throw new LogicException("Unknown column '" . $id . "'."); + throw new \LogicException("Unknown column '" . $id . "'."); } if (!$column->getFilter()) { - throw new LogicException("Column '" . $id . "' has no filter."); + throw new \LogicException("Column '" . $id . "' has no filter."); } if (!isset($this->activeFilters[$id])) { - throw new LogicException("No value for filter '" . $id . "' found."); + throw new \LogicException("No value for filter '" . $id . "' found."); } $value = $column->getFilter()->renderValue($this->activeFilters[$id]); @@ -761,14 +761,28 @@ protected function initObjectList(): void */ protected function applyFilters(): void { - foreach ($this->getActiveFilters() as $key => $value) { + $this->activeFilters = \array_filter($this->activeFilters, function ($value, $key) { $column = $this->getColumn($key); if (!$column) { - throw new LogicException("Unknown column '" . $key . "'"); + if (\ENABLE_DEBUG_MODE) { + throw new \LogicException("Filter applied for unknown column '{$key}'."); + } else { + return false; + } } - $column->getFilter()->applyFilter($this->getObjectList(), $column->getID(), $value); - } + try { + $column->getFilter()->applyFilter($this->getObjectList(), $column->getID(), $value); + } catch (InvalidFilterValue $e) { + if (\ENABLE_DEBUG_MODE) { + throw $e; + } else { + return false; + } + } + + return true; + }, \ARRAY_FILTER_USE_BOTH); } /** diff --git a/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php index aafdd6fa510..241a034afea 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php @@ -36,9 +36,14 @@ public function getFormField(string $id, string $label): AbstractFormField #[\Override] public function applyFilter(DatabaseObjectList $list, string $id, string $value): void { + $category = CategoryHandler::getInstance()->getCategory((int)$value); + if ($category === null) { + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$id}' given."); + } + $columnName = $this->getDatabaseColumnName($list, $id); - $list->getConditionBuilder()->add("{$columnName} = ?", [$value]); + $list->getConditionBuilder()->add("{$columnName} = ?", [$category->categoryID]); } #[\Override] diff --git a/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php index 7643e560741..2c985436136 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php @@ -32,7 +32,7 @@ public function applyFilter(DatabaseObjectList $list, string $id, string $value) $timestamps = $this->getTimestamps($value); if (!$timestamps['from'] && !$timestamps['to']) { - return; + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$id}' given."); } if (!$timestamps['to']) { diff --git a/wcfsetup/install/files/lib/system/gridView/filter/InvalidFilterValue.class.php b/wcfsetup/install/files/lib/system/gridView/filter/InvalidFilterValue.class.php new file mode 100644 index 00000000000..49ce9caf059 --- /dev/null +++ b/wcfsetup/install/files/lib/system/gridView/filter/InvalidFilterValue.class.php @@ -0,0 +1,13 @@ + + * @since 6.2 + */ +final class InvalidFilterValue extends \RuntimeException {} diff --git a/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php index 16704eac69e..42150fb6695 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php @@ -39,7 +39,7 @@ public function applyFilter(DatabaseObjectList $list, string $id, string $value) $values = $this->parseValue($value); if (!$values['from'] && !$values['to']) { - return; + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$id}' given."); } if (!$values['to']) { diff --git a/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php index 67aeb57176e..17c8cd9ea2c 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php @@ -39,6 +39,10 @@ public function getFormField(string $id, string $label): AbstractFormField #[\Override] public function applyFilter(DatabaseObjectList $list, string $id, string $value): void { + if (!isset($this->options[$value])) { + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$id}' given."); + } + $columnName = $this->getDatabaseColumnName($list, $id); $list->getConditionBuilder()->add("{$columnName} = ?", [$value]); diff --git a/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php index d0ac7070fb3..c59d4becf70 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php @@ -34,7 +34,7 @@ public function applyFilter(DatabaseObjectList $list, string $id, string $value) $timestamps = $this->getTimestamps($value); if (!$timestamps['from'] && !$timestamps['to']) { - return; + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$id}' given."); } if (!$timestamps['to']) { diff --git a/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php index 299e430a3f4..e7fccf3ff86 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php @@ -28,9 +28,14 @@ public function getFormField(string $id, string $label): AbstractFormField #[\Override] public function applyFilter(DatabaseObjectList $list, string $id, string $value): void { + $user = UserRuntimeCache::getInstance()->getObject((int)$value); + if ($user === null) { + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$id}' given."); + } + $columnName = $this->getDatabaseColumnName($list, $id); - $list->getConditionBuilder()->add("{$columnName} = ?", [$value]); + $list->getConditionBuilder()->add("{$columnName} = ?", [$user->userID]); } #[\Override] diff --git a/wcfsetup/install/files/lib/system/listView/AbstractListView.class.php b/wcfsetup/install/files/lib/system/listView/AbstractListView.class.php index 868181d82f8..48e79cb4b93 100644 --- a/wcfsetup/install/files/lib/system/listView/AbstractListView.class.php +++ b/wcfsetup/install/files/lib/system/listView/AbstractListView.class.php @@ -12,6 +12,7 @@ use wcf\system\interaction\IInteractionProvider; use wcf\system\interaction\InteractionContextMenuComponent; use wcf\system\listView\filter\IListViewFilter; +use wcf\system\listView\filter\InvalidFilterValue; use wcf\system\request\LinkHandler; use wcf\system\WCF; @@ -244,13 +245,27 @@ protected function getSqlOrderBy(): string */ protected function applyFilters(): void { - foreach ($this->getActiveFilters() as $key => $value) { + $this->activeFilters = \array_filter($this->activeFilters, function ($value, $key) { if (!isset($this->availableFilters[$key])) { - throw new \LogicException("Unknown filter '" . $key . "'"); + if (\ENABLE_DEBUG_MODE) { + throw new \LogicException("Filter applied for unknown column '{$key}'."); + } else { + return false; + } } - $this->availableFilters[$key]->applyFilter($this->getObjectList(), $value); - } + try { + $this->availableFilters[$key]->applyFilter($this->getObjectList(), $value); + } catch (InvalidFilterValue $e) { + if (\ENABLE_DEBUG_MODE) { + throw $e; + } else { + return false; + } + } + + return true; + }, \ARRAY_FILTER_USE_BOTH); } /** diff --git a/wcfsetup/install/files/lib/system/listView/filter/CategoryFilter.class.php b/wcfsetup/install/files/lib/system/listView/filter/CategoryFilter.class.php index 6e3310c2b3a..ec11479e5c1 100644 --- a/wcfsetup/install/files/lib/system/listView/filter/CategoryFilter.class.php +++ b/wcfsetup/install/files/lib/system/listView/filter/CategoryFilter.class.php @@ -41,6 +41,11 @@ public function getFormField(): AbstractFormField #[\Override] public function applyFilter(DatabaseObjectList $list, string $value): void { + $category = CategoryHandler::getInstance()->getCategory((int)$value); + if ($category === null) { + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$this->id}' given."); + } + $columnName = $this->getDatabaseColumnName($list); $list->getConditionBuilder()->add("{$columnName} = ?", [$value]); diff --git a/wcfsetup/install/files/lib/system/listView/filter/DateFilter.class.php b/wcfsetup/install/files/lib/system/listView/filter/DateFilter.class.php index f6675d78bd6..537a97ea7a5 100644 --- a/wcfsetup/install/files/lib/system/listView/filter/DateFilter.class.php +++ b/wcfsetup/install/files/lib/system/listView/filter/DateFilter.class.php @@ -32,7 +32,7 @@ public function applyFilter(DatabaseObjectList $list, string $value): void $timestamps = $this->getTimestamps($value); if (!$timestamps['from'] && !$timestamps['to']) { - return; + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$this->id}' given."); } if (!$timestamps['to']) { diff --git a/wcfsetup/install/files/lib/system/listView/filter/InvalidFilterValue.class.php b/wcfsetup/install/files/lib/system/listView/filter/InvalidFilterValue.class.php new file mode 100644 index 00000000000..3b205f10cde --- /dev/null +++ b/wcfsetup/install/files/lib/system/listView/filter/InvalidFilterValue.class.php @@ -0,0 +1,13 @@ + + * @since 6.2 + */ +final class InvalidFilterValue extends \RuntimeException {} diff --git a/wcfsetup/install/files/lib/system/listView/filter/LabelFilter.class.php b/wcfsetup/install/files/lib/system/listView/filter/LabelFilter.class.php index ecfd2f18254..2bfa1ce588e 100644 --- a/wcfsetup/install/files/lib/system/listView/filter/LabelFilter.class.php +++ b/wcfsetup/install/files/lib/system/listView/filter/LabelFilter.class.php @@ -43,6 +43,11 @@ public function getLabel(): string #[\Override] public function applyFilter(DatabaseObjectList $list, string $value): void { + $label = $this->labelGroup->getLabel((int)$value); + if ($label === null) { + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$this->id}' given."); + } + $list->getConditionBuilder()->add( "{$list->getDatabaseTableAlias()}.{$list->getDatabaseTableIndexName()} IN ( SELECT objectID @@ -52,7 +57,7 @@ public function applyFilter(DatabaseObjectList $list, string $value): void )", [ $this->objectTypeID, - $value, + $label->labelID, ] ); } diff --git a/wcfsetup/install/files/lib/system/listView/filter/NumericFilter.class.php b/wcfsetup/install/files/lib/system/listView/filter/NumericFilter.class.php index 4eac64fe58c..cb4f7bc2cfe 100644 --- a/wcfsetup/install/files/lib/system/listView/filter/NumericFilter.class.php +++ b/wcfsetup/install/files/lib/system/listView/filter/NumericFilter.class.php @@ -41,7 +41,7 @@ public function applyFilter(DatabaseObjectList $list, string $value): void $values = $this->parseValue($value); if (!$values['from'] && !$values['to']) { - return; + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$this->id}' given."); } if (!$values['to']) { diff --git a/wcfsetup/install/files/lib/system/listView/filter/SelectFilter.class.php b/wcfsetup/install/files/lib/system/listView/filter/SelectFilter.class.php index b98d5e28eec..a2d354daff1 100644 --- a/wcfsetup/install/files/lib/system/listView/filter/SelectFilter.class.php +++ b/wcfsetup/install/files/lib/system/listView/filter/SelectFilter.class.php @@ -41,6 +41,10 @@ public function getFormField(): AbstractFormField #[\Override] public function applyFilter(DatabaseObjectList $list, string $value): void { + if (!isset($this->options[$value])) { + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$this->id}' given."); + } + $columnName = $this->getDatabaseColumnName($list); $list->getConditionBuilder()->add("{$columnName} = ?", [$value]); diff --git a/wcfsetup/install/files/lib/system/listView/filter/TimeFilter.class.php b/wcfsetup/install/files/lib/system/listView/filter/TimeFilter.class.php index 2d6d2e9082d..59620fe75e8 100644 --- a/wcfsetup/install/files/lib/system/listView/filter/TimeFilter.class.php +++ b/wcfsetup/install/files/lib/system/listView/filter/TimeFilter.class.php @@ -34,7 +34,7 @@ public function applyFilter(DatabaseObjectList $list, string $value): void $timestamps = $this->getTimestamps($value); if (!$timestamps['from'] && !$timestamps['to']) { - return; + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$this->id}' given."); } if (!$timestamps['to']) { diff --git a/wcfsetup/install/files/lib/system/listView/filter/UserFilter.class.php b/wcfsetup/install/files/lib/system/listView/filter/UserFilter.class.php index 4f44f69ad17..b438adcd24b 100644 --- a/wcfsetup/install/files/lib/system/listView/filter/UserFilter.class.php +++ b/wcfsetup/install/files/lib/system/listView/filter/UserFilter.class.php @@ -28,6 +28,11 @@ public function getFormField(): AbstractFormField #[\Override] public function applyFilter(DatabaseObjectList $list, string $value): void { + $user = UserRuntimeCache::getInstance()->getObject((int)$value); + if ($user === null) { + throw new InvalidFilterValue("Invalid value '{$value}' for filter '{$this->id}' given."); + } + $columnName = $this->getDatabaseColumnName($list); $list->getConditionBuilder()->add("{$columnName} = ?", [$value]); From 507412957b667b0138325e9fedaea5c6c2c5a139 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Fri, 18 Jul 2025 12:28:43 +0200 Subject: [PATCH 2/2] Apply suggestions from code review --- .../files/lib/system/gridView/AbstractGridView.class.php | 2 +- .../files/lib/system/gridView/filter/CategoryFilter.class.php | 1 + .../files/lib/system/gridView/filter/DateFilter.class.php | 1 + .../files/lib/system/gridView/filter/NumericFilter.class.php | 1 + .../files/lib/system/gridView/filter/SelectFilter.class.php | 1 + .../files/lib/system/gridView/filter/TimeFilter.class.php | 1 + .../files/lib/system/gridView/filter/UserFilter.class.php | 1 + .../filter/{ => exception}/InvalidFilterValue.class.php | 2 +- .../files/lib/system/listView/AbstractListView.class.php | 2 +- .../files/lib/system/listView/filter/CategoryFilter.class.php | 1 + .../files/lib/system/listView/filter/DateFilter.class.php | 1 + .../files/lib/system/listView/filter/LabelFilter.class.php | 1 + .../files/lib/system/listView/filter/NumericFilter.class.php | 1 + .../files/lib/system/listView/filter/SelectFilter.class.php | 1 + .../files/lib/system/listView/filter/TimeFilter.class.php | 1 + .../files/lib/system/listView/filter/UserFilter.class.php | 1 + .../filter/{ => exception}/InvalidFilterValue.class.php | 2 +- 17 files changed, 17 insertions(+), 4 deletions(-) rename wcfsetup/install/files/lib/system/gridView/filter/{ => exception}/InvalidFilterValue.class.php (88%) rename wcfsetup/install/files/lib/system/listView/filter/{ => exception}/InvalidFilterValue.class.php (88%) diff --git a/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php b/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php index bf0cf41c6f9..d5e30f2f894 100644 --- a/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php +++ b/wcfsetup/install/files/lib/system/gridView/AbstractGridView.class.php @@ -7,7 +7,7 @@ use wcf\data\DatabaseObjectList; use wcf\event\IPsr14Event; use wcf\system\event\EventHandler; -use wcf\system\gridView\filter\InvalidFilterValue; +use wcf\system\gridView\filter\exception\InvalidFilterValue; use wcf\system\interaction\bulk\IBulkInteractionProvider; use wcf\system\interaction\IInteraction; use wcf\system\interaction\IInteractionProvider; diff --git a/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php index 241a034afea..96828898eed 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/CategoryFilter.class.php @@ -6,6 +6,7 @@ use wcf\system\category\CategoryHandler; use wcf\system\form\builder\field\AbstractFormField; use wcf\system\form\builder\field\SelectFormField; +use wcf\system\gridView\filter\exception\InvalidFilterValue; /** * Allows a column to be filtered on the basis of a select category. diff --git a/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php index 2c985436136..772e7f5d634 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/DateFilter.class.php @@ -5,6 +5,7 @@ use wcf\data\DatabaseObjectList; use wcf\system\form\builder\field\AbstractFormField; use wcf\system\form\builder\field\DateRangeFormField; +use wcf\system\gridView\filter\exception\InvalidFilterValue; use wcf\system\WCF; /** diff --git a/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php index 42150fb6695..cb41dc21635 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/NumericFilter.class.php @@ -5,6 +5,7 @@ use wcf\data\DatabaseObjectList; use wcf\system\form\builder\field\AbstractFormField; use wcf\system\form\builder\field\NumericRangeFormField; +use wcf\system\gridView\filter\exception\InvalidFilterValue; /** * Filter for columns that contain numerics. diff --git a/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php index 17c8cd9ea2c..6b6b87a601e 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/SelectFilter.class.php @@ -5,6 +5,7 @@ use wcf\data\DatabaseObjectList; use wcf\system\form\builder\field\AbstractFormField; use wcf\system\form\builder\field\SelectFormField; +use wcf\system\gridView\filter\exception\InvalidFilterValue; use wcf\system\WCF; /** diff --git a/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php index c59d4becf70..151f5b403af 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/TimeFilter.class.php @@ -5,6 +5,7 @@ use wcf\data\DatabaseObjectList; use wcf\system\form\builder\field\AbstractFormField; use wcf\system\form\builder\field\DateRangeFormField; +use wcf\system\gridView\filter\exception\InvalidFilterValue; use wcf\system\WCF; /** diff --git a/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php b/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php index e7fccf3ff86..8271408c8fa 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/UserFilter.class.php @@ -6,6 +6,7 @@ use wcf\system\cache\runtime\UserRuntimeCache; use wcf\system\form\builder\field\AbstractFormField; use wcf\system\form\builder\field\user\UserFormField; +use wcf\system\gridView\filter\exception\InvalidFilterValue; /** * Filter for columns that contain user ids. diff --git a/wcfsetup/install/files/lib/system/gridView/filter/InvalidFilterValue.class.php b/wcfsetup/install/files/lib/system/gridView/filter/exception/InvalidFilterValue.class.php similarity index 88% rename from wcfsetup/install/files/lib/system/gridView/filter/InvalidFilterValue.class.php rename to wcfsetup/install/files/lib/system/gridView/filter/exception/InvalidFilterValue.class.php index 49ce9caf059..3bb8168db4c 100644 --- a/wcfsetup/install/files/lib/system/gridView/filter/InvalidFilterValue.class.php +++ b/wcfsetup/install/files/lib/system/gridView/filter/exception/InvalidFilterValue.class.php @@ -1,6 +1,6 @@