Illegal offset type in Suche

  • Affected Version
    WoltLab Suite 5.4
    Affected App
    WoltLab Suite Core

    Die Suche kann zu einer Fehlermeldung führen, wenn man /index.php?search/&types%5B%5D[]=com.woltlab.wbb.post angibt:

    Requested URL
    GET /core/search/?types%5B%5D[]=com.woltlab.wbb.post
    Referrer
    WoltLab Suite
    5.4.16
    PHP
    7.4.28
    Error Message
    Illegal offset type
    Type
    wcf\system\exception\ErrorException
    File (Line)
    /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/WCF.class.php (344)
    Stacktrace
    1. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/api/sentry/sentry/sentry/src/ErrorHandler.php (303): wcf\system\WCF::handleError(…)
    2. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/search/SearchEngine.class.php (72): Sentry\ErrorHandler->handleError(…)
    3. /customers/kittmedia/home/shop.kittmedia.com/core/lib/form/SearchForm.class.php (175): wcf\system\search\SearchEngine->getObjectType(…)
    4. /customers/kittmedia/home/shop.kittmedia.com/core/lib/page/AbstractPage.class.php (121): wcf\form\SearchForm->readParameters(…)
    5. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/request/Request.class.php (89): wcf\page\AbstractPage->__run(…)
    6. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
    7. /customers/kittmedia/home/shop.kittmedia.com/core/index.php (11): wcf\system\request\RequestHandler->handle(…)
  • Es gibt „drölfzig“ Stellen, auf die dies zutrifft und die Ursache ist eine grundsätzliche Design-Schwäche bei der Verarbeitung von Parametern. Es ist fairerweise im Kern aber auch „nur“ ein „nerviges“ Problem. Es macht einfach keinen Sinn, an einer spezifischen Stelle anzusetzen, da dies das Problem effektiv nur verlagern würde.

    Eine echte Lösung kann nur eine wohldefinierte Verarbeitung von Parametern sein, die konsequent zum Einsatz kommt und eine einheitliche Verarbeitung ermöglicht. Dies erfordert eine ordentliche Planung und Durchführung, um dies sorgfältig umzusetzen.

  • Hallo,

    ich setze dieses Thema mal auf „Umgesetzt“, weil das von Alexander angesprochene Konzept existiert.

    Für Entwickler

    Mit WoltLab Suite 6.0 liefern wir „Valinor“ zur Strukturvalidierung von Eingabeparametern mit: https://docs.woltlab.com/6.0/migration/…nput-validation

    Für API-Controller auf Basis von PSR-15 verweise ich ganz allgemein auf dieses Thema:

    Tim Düsterhus
    December 9, 2022 at 5:20 PM

    Für Controller mit denen der Benutzer direkt interagiert, sollte der MappingError von Valinor gefangen werden, um die Benutzerfreundlichkeit zu erhöhen.

    Speziell für den id-Parameter sieht ein vollständiges Beispiel wie folgt aus. Es können und sollten natürlich auch andere Parameter (bspw. filter-Parameter) validiert werden. Referenziert dazu die Valinor-Dokumentation.

    Nicht-PSR-15, kein API-Controller

    PSR-15, API-Controller

    PHP
            $parameters = Helper::mapQueryParameters(
                $request->getQueryParams(),
                <<<'EOT'
                    array {
                        id: positive-int
                    }
                    EOT
            );
            // Objekt aus der Datenbank lesen und prüfen ob ID existiert.
  • Tim Düsterhus February 7, 2023 at 5:07 PM

    Added the Label 6.0.0 Beta 1
  • Tim Düsterhus February 7, 2023 at 5:07 PM

    Set the Label from Future fix to Fixed

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!