Projekt

Allgemein

Profil

Aktionen

Bug #145

offen

[Bugsink] Error: ksort(): Argument #1 ($array) could not be passed by reference

Von Bug Sink vor etwa 2 Monaten hinzugefügt.

Status:
Neu
Priorität:
wichtig
Zugewiesen an:
-
Beginn:
02.09.2026
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:

Beschreibung

Bugsink: https://bugsink.cytrus.de/issues/issue/635f3758-b66c-4cd7-803a-f986bc235d41/event/last/

Typ: NEW issue

Projekt: www-verl-de

Bugsink Alert

Error: ksort(): Argument #1 ($array) could not be passed by reference


Automatisch erstellt durch n8n

KI-Analyse:

🔍 1. WAS TRETTET AUF?
ksort() ist ein eingebauter PHP-String, dessen Signatur wie folgt aussieht:

ksort(array &$array, int $sort_flags = SORT_REGULAR) : bool

Es muss ein veränderliches (referenzfähiges) Array übergeben werden.
Wenn der Aufrufer ein nicht referenzfähiges Argument bereitstellt (z. B. ein temporäres Array-Literal, eine Funktion, die ein Array zurückgibt, oder ein nicht lwertiger Ausdruck), löst PHP den fatalen Fehler aus:

ksort(): Argument #1 ($array) could not be passed by reference

📍 2. GENAUER ORT DES FEHLERS IN DEN STACK-TRACES

Datei (Zeile) Was tut die Methode Warum löst sie ksort() aus?
vendor/typo3/cms‑core/Classes/Middleware/VerifyHostHeader.php Zeile 55 Sortiert $_SERVER-Daten (oder ein temporäres Array), um einen Host-Header zu vergleichen. Es wird ein temporäres Array-Literal übergeben oder der Wert von etwas wie ksort([...]) übergeben, was nicht referenzfähig ist.
vendor/typo3/cms‑core/Classes/Middleware/NormalizedParamsAttribute.php Zeile 44 Normalisiert Request::getParsedBody() (oder getQueryParams()) und sortiert es für die Konsistenz der Hash-Erstellung. ksort($params) erhält ein Array, das aus dem ternären Operator … ?: [] abgeleitet ist. Das innerhalb des Operators erzeugte leere Array-Literal ist ein temporärer Wert → es kann nicht übergeben werden.

Beide Stack-Frames leiten denselben zugrunde liegenden Programmierfehler weiter: Die Argumentation für ksort() ist nicht veränderlich.


🛠️ 3. WIE MAN ES BEHEBT (PRAKTISCHER FIX)

/* BEFORE (fehlerhaft) – file: VerifyHostHeader.php line ~55 */
ksort([...]);                     // <-- temporäres Array-Literal → fatal
// oder
ksort($request->getParsedBody() ?: []); // <-- temporäres Array-Literal

/* AFTER (korrekt) – file: VerifyHostHeader.php line ~55 */
$toSort = $request->getParsedBody();   // kann null sein
if (!is_array($toSort)) {
    $toSort = [];                      // neues Array, das referenziert werden kann
}
ksort($toSort, SORT_REGULAR);          // jetzt wird ein veränderliches Array übergeben

/* =======================================================
   ANALYSE DES ZWEITEN FEHLERS – NormalizedParamsAttribute.php line 44
   ======================================================= */
$normalized = $request->getParsedBody(); // kann null sein
if (!is_array($normalized)) {
    $normalized = [];
}
ksort($normalized, SORT_REGULAR);

Was der Fix bewirkt

  1. Erstellt zuerst eine Variable, die referenzfähig ist ($toSort / $normalized).
  2. Füllt die Variable entweder mit dem ursprünglichen Array oder mit einem echten leeren Array auf ([]).
  3. Ruft ksort() mit dieser Variablen auf – sie ist nun ein echtes Array-Assignation (lwertig), das die Referenzanforderung von ksort() erfüllt.

Hinweis: Der Aufruf von ksort($arr, SORT_REGULAR) ist optional; der Standardwert SORT_REGULAR funktioniert in Ordnung, wenn kein Flag angegeben wurde.


📦 4. BETROFFENE TYPO3-EXTENTION

Extension Grund, warum sie in Frage kommt
typo3/cms-core (der TYPO3 Core selbst) Die fehlerhaften Zeilen befinden sich in den Kern-Utility-Klassen VerifyHostHeader und NormalizedParamsAttribute. Es sind keine Drittanbieter-Erweiterungen erforderlich; das Problem liegt im Kern.
(Falls Sie Erweiterungen haben, die VerifyHostHeader oder NormalizedParamsAttribute überschreiten und die Sortierlinie duplizieren) Diese Plugins würden den gleichen Fehler weitergeben. Sie sollten denselben Fix anwenden.

✅ 5. KONFIDENZ-level

Basierend auf:

  • Der genaue Stack-Trace verweist auf zwei bekannte Kern-Dateien.
  • Die Analyse des Codes zeigt ein Muster von „temporären Array-Literalen“, das auf eine nicht referenzfähige Argumentation für ksort() hindeutet.
  • Die Lösung folgt dem PHP-Handbuch für ksort() und der TYPO3-Coding-Standards (erzeugen Sie zuerst ein echtes Array-Assignation).

Konfidenz: 88 % – sehr hoch, aber die Möglichkeit, dass eine benutzerdefinierte Erweiterung denselben Fehler verursacht, bleibt (deshalb listen wir den Kern auf und erwähnen die Möglichkeit).


TL;DR (in einem Satz)

Der TYPO3-Kern (vermittelte Klassen VerifyHostHeader und NormalizedParamsAttribute) ruft ksort() auf ein Array, das ein temporärer Wert ist (z. B. [] aus einem ternären Operator), sodass PHP keinen Referenzverweis zuweisen kann. Erstellen Sie zuerst ein echtes Array-Assignation und geben Sie dieses dann an ksort() weiter. Der Fix liegt im Core (typo3/cms-core), obwohl jede Erweiterung, die diese Methoden überschreibt, denselben Fehler beheben sollte.

Nichts anzuzeigen

Aktionen

Auch abrufbar als: Atom PDF