Beantwortet Bug in BaseSearchQuery.php in Shop v5.2.1 ?

LS|media

Aktives Mitglied
29. Januar 2016
27
4
Hallo,

ich habe den Eindruck, dass in der Datei BaseSearchQuery.php ein Bug sein könnte.

Ausgangssituation: Die Volltextsuche (Einstellung #1657) ist deaktiviert. Die Standardsuche wird verwendet.

Bei der erstmaligen Suche nach einem Suchbegriff (weniger als 3 Suchwörter), zu dem es keine Suchtreffer gibt, erhalte ich folgende Fehlermeldung:

Code:
Fatal error: Uncaught ValueError: str_repeat(): Argument #2 ($times) must be greater than or equal to 0 in [root]/includes/src/Filter/States/BaseSearchQuery.php:867

Stack trace:
#0 [root]/includes/src/Filter/States/BaseSearchQuery.php(867): str_repeat()
#1 [root]/includes/src/Filter/ProductFilter.php(707): JTL\Filter\States\BaseSearchQuery->editSearchCache()
#2 [root]/includes/src/Router/Controller/AbstractController.php(184): JTL\Filter\ProductFilter->initStates()
#3 [root]/includes/src/Router/Controller/SearchController.php(28): JTL\Router\Controller\AbstractController->updateProductFilter()
#4 [root]/includes/src/Router/Controller/SearchController.php(47): JTL\Router\Controller\SearchController->getStateFromSlug()
#5 [root]/includes/src/Router/Controller/RootController.php(40): JTL\Router\Controller\SearchController->getResponse()
#6 [root]/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\RootController->getResponse()
#7 [root]/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable()
#8 [root]/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process()
#9 [root]/includes/src/Router/Middleware/OptinMiddleware.php(49): League\Route\Dispatcher->handle()
#10 [root]/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\OptinMiddleware->process()
#11 [root]/includes/src/Router/Middleware/CurrencyCheckMiddleware.php(26): League\Route\Dispatcher->handle()
#12 [root]/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\CurrencyCheckMiddleware->process()
#13 [root]/includes/src/Router/Middleware/LocaleCheckMiddleware.php(34): League\Route\Dispatcher->handle()
#14 [root]/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\LocaleCheckMiddleware->process()
#15 [root]/includes/src/Router/Middleware/CartcheckMiddleware.php(25): League\Route\Dispatcher->handle()
#16 [root]/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\CartcheckMiddleware->process()
#17 [root]/includes/src/Router/Middleware/WishlistCheckMiddleware.php(24): League\Route\Dispatcher->handle()
#18 [root]/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WishlistCheckMiddleware->process()
#19 [root]/includes/src/Router/Middleware/SSLRedirectMiddleware.php(30): League\Route\Dispatcher->handle()
#20 [root]/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\SSLRedirectMiddleware->process()
#21 [root]/includes/src/Router/Middleware/MaintenanceModeMiddleware.php(40): League\Route\Dispatcher->handle()
#22 [root]/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\MaintenanceModeMiddleware->process()
#23 [root]/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle()
#24 [root]/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process()
#25 [root]/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle()
#26 [root]/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest()
#27 [root]/includes/src/Router/Router.php(659): League\Route\Router->dispatch()
#28 [root]/includes/src/Shop.php(455): JTL\Router\Router->dispatch()
#29 [root]/index.php(7): JTL\Shop::dispatch()
#30 {main} thrown in [root]/includes/src/Filter/States/BaseSearchQuery.php on line 867

Jede weitere Suchanfrage mit gleichem Suchbegriff scheint fehlerfrei zu funktionieren. Es wird wie erwartet die Suchseite angezeigt - mit der Meldung, dass nichts gefunden wurde.

Ich vermute, dass der Suchbegriff noch nicht im Cache gespeichert ist und daher an folgender Stelle im Code $rows leer ist und str_repeat() mit dem Wert -1 aufgerufen wird:
PHP:
$brackets = 0;
$prio     = 1;

foreach ($rows as $i => $col) {
    [...]
    ++$brackets;
    [...]
}

$sql .= \str_repeat(')', ($brackets - 1));

Kann das jemand reproduzieren?
Liegt das an einer falschen Konfiguration in unserem Shop oder ist das ein Bug im Code?

Gerade teste ich, ob der Fehler auch bei aktivierter Volltextsuche auftritt (Volltextindex wird gerade erstellt). Ich werde hier berichten.

VG Sven
 

LS|media

Aktives Mitglied
29. Januar 2016
27
4
Sorry, ich war etwas voreilig und kann meine Frage selbst beantworten: Nein, es ist kein Bug... vielleicht ein kleiner :)

Ursache war, dass jemand alle Suchprioritäten im Shop auf 0 gesetzt und damit deaktiviert hat. Das fiel mir zu spät auf und macht natürlich wenig Sinn.
Vielleicht könnte man dennoch für diesen Fall den Code etwas stabiler machen.

Mit aktivierter Volltextsuche trat die Fehlermeldung nicht auf.

VG Sven