Bug #194
offen[Bugsink] ErrorException: Warning: foreach() argument must be of type arrayobject, string given
0%
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:
-
VerifyHostHeaderverwendet$this->allowedHosts(aus$GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern']). -
NormalizedParamsAttributeverwendet$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\VerifyHostHeaderTYPO3\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