Projekt

Allgemein

Profil

Aktionen

Bug #194

offen

[Bugsink] ErrorException: Warning: foreach() argument must be of type arrayobject, string given

Von Bug Sink vor etwa 1 Monat hinzugefügt.

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

0%

Geschätzter Aufwand:

Beschreibung

Bugsink: https://bugsink.cytrus.de/issues/issue/c1343673-d62f-400f-91fd-fe87d80b2bc0/event/last/

Typ: NEW issue

Projekt: www-verl-de

Bugsink Alert

ErrorException: Warning: foreach() argument must be of type arrayobject, string given


Automatisch erstellt durch n8n

KI-Analyse:

1. Ursache identifizieren
Der Stack‑Trace zeigt, dass die Ausnahme im Middleware‑Stack entsteht, nachdem VerifyHostHeader::process (Zeile 55) und anschließend NormalizedParamsAttribute::process (Zeile 44) durchlaufen wurden. In beiden Klassen wird ein foreach über eine Eigenschaft ausgeführt, die aus einer TYPO3‑Konfiguration stammt:

  • VerifyHostHeader verwendet $this->allowedHosts (aus $GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern']).
  • NormalizedParamsAttribute verwendet $this->attributes (aus $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling'] bzw. ähnlichen Einstellungen).

Die Fehlermeldung

Warning: foreach() argument must be of type array|object, string given

deutet darauf hin, dass die jeweilige Eigenschaft kein Array oder Traversable, sondern ein String enthält. Der häufigste Auslöser ist, dass ein Site‑Administrator die entsprechende Konfiguration (z. B. trustedHostsPattern) als einfachen String statt als Array gesetzt hat (z. B. 'trustedHostsPattern' => 'example.com' statt ['example.com']).

2. Fix beschreiben (konkret)
Die Lösung besteht darin, sicherzustellen, dass die Eigenschaft vor dem foreach immer ein Array ist. Dies kann entweder in der jeweiligen Middleware‑Klasse erfolgen oder (besser) beim Einlesen der Konfiguration korrigiert werden.

Im konkreten Fall von VerifyHostHeader::process (Datei Classes/Middleware/VerifyHostHeader.php):

// Vor dem foreach sicherstellen, dass $this->allowedHosts ein Array ist
if (is_string($this->allowedHosts)) {
    $this->allowedHosts = [$this->allowedHosts];
}
// Alternativ: cast zu Array (nimmt auch null, false etc. sicher)
$this->allowedHosts = (array) $this->allowedHosts;

foreach ($this->allowedHosts as $pattern) {
    // … bestehende Logik …
}

Für NormalizedParamsAttribute analog:

$this->attributes = (array) $this->attributes;
foreach ($this->attributes as $name => $default) {
    // …
}

Ein noch zentralerer Ansatz ist, beim Bootstrapping (z. B. in Configuration/Services.yaml oder im Bootstrap) die betroffenen Einträge zu normalisieren:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern'] = 
    is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern'])
        ? $GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern']
        : [$GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern']];

3. Betroffene TYPO3 Extension nennen
Der Fehler liegt im TYPO3 Core, genauer in den Middleware‑Komponenten:

  • TYPO3\CMS\Core\Middleware\VerifyHostHeader
  • TYPO3\CMS\Core\Middleware\NormalizedParamsAttribute

Es handelt sich also nicht um eine Dritt‑Party‑Extension, sondern um den Kern selbst (Bundle typo3/cms-core).

4. Confidence (0‑100 %)
Angesichts des klaren Stack‑Traces, der typischen Konfigurationsquelle (trustedHostsPattern) und der bekannten Praxis, dass Administratoren diesen Wert gelegentlich als String setzen, beträgt meine Sicherheit ≈ 95 %. Der vorgeschlagene Fix entspricht exakt dem Muster, das in der TYPO3‑Quellcode‑Historie bereits für ähnliche Fälle verwendet wurde.

Nichts anzuzeigen

Aktionen

Auch abrufbar als: Atom PDF