TYPO3 Release 14.3.8
In der Reihe TYPO3 Release-Notizen beleuchten wir regelmäßig die wichtigsten Bug-Fixes/Security-Issues oder wichtigen Änderungen in einem neuen Patchlevel-Release. Diese Releases sind gemäß Roadmap bereits terminiert und erscheinen grob einmal im Monat.
Bugs haben je nach Projekt unterschiedliche Auswirkungen. Was in einem Projekt kritisch ist, kann in einem anderen kaum eine Rolle spielen. Unsere Gewichtung ist daher subjektiv und soll die Relevanz anderer Fixes nicht herabspielen.
Aktuelles Release
Dieses Security-Release behebt primär eine Sicherheitslücke in der SVG-Absicherungsbibliothek enshrined/svg-sanitizer. Aufgrund eines Security-Advisories weigern sich neue Composer-Versionen sonst zur Installation von TYPO3. Ansonsten beschäftigt sich dieses Release mit:
- Frontend-Aufrufe von ungültigen ?type=xxx URIs lösen keinen Fehler-Log-Spam mehr aus
- Weitere Workspace/History-Bugfixes
- Ausgliederung des Extension Scanners als Service und kleinere Bugfixes
- Extension Manager Kompatibilität zu TER
- Update CKEditor (Behebung von Safari macOS 27 Problemen)
- ErlaubteContent-Elemente werden direkt im Drag and Drop Vorgang ausgewertet
- Diverse EXT:indexed_search Bugfixes
Insgesamt gab es 232 Änderungen.
Sicherheit
TCA / Schema API / Record API
- WissenswertDie "sys_file_storage" Relation in "sys_file" Datensätzen wird in Vorbereitung für deren Datensatz-Entfernung (in v15) stärker entkoppelt. Dies hat Auswirkungen auf die Record API Auflösung, siehe Changelog https://docs.typo3.org/permalink/changelog:important-110684-1789168000
- Die Auswertung von `label_alt` stoppt nun beim ersten zutreffenden Fallback eines Labels, anstelle diese miteinander zu verbinden
- Bessere Auswertung der `l10n_mode=exclude` Darstellung
- Der Titel eines typenspezifischen Records wird nun konsistenter und zentralisiert verarbeitet und zurückgegeben
EXT:form
- WissenswertVermeidung eines PHP-Typfehlers bei Nutzung des Mehrfach-Uploads und Validierungsfehlern/Browser-Navigation im Frontend
- Fehlermeldungen bei ausgefüllten Form-Manager-GUI Feldern werden nun besser dargestellt
- Die Felder crdate+tstamp werden im SaveToDatabase-Finisher nun immer automatisch gesetzt (insert/update)
- CKEditor CSS-Styles im Form-Editor werden nun korrekt geladen
EXT:felogin
TypoScript
- WissenswertBei Nutzung der TypoScript `stdWrap.cache` Option wird nun auch ausgewertet, ob eine Seite überhaupt gecacht werden darf, um Cache Poisoning in ungewünschten Szenarien zu vermeiden
- Die RteHtml Option "allowAttributes" kann als Fallback auch als kommaseparierte Liste anstelle nur als Array in TypoScript definiert werden
- TypoScript Datenbankabfragen via `select.max/min` wertet nun die Anzahl von `.total` auch korrekt aus wenn JOINs involviert sind
- Das Deaktivieren von Alerts (`options.alertPopups = xxx`) bei gewissen Aktionen im PageTree wird nun respektiert (TSConfig)
API (Frontend / Extbase)
- Sehr wichtigDie Dimensionen für das `data-focus-area` HTML Attribut wurden immer auf die Originalmaße eines Bildes angewendet, und waren somit falsch, wenn ein verarbeitetes Bild (Crop/Resize/...) tatsächlich dargestellt wurde
- Sehr wichtigFrontend-Aufrufe von `?type=xxx` URIs mit einem nicht definierten Typ fluten nun nicht mehr die ErrorLogs sondern werden als 404 behandelt. DANKE!
- Vereinfachung des CollectionValidators für array-Shapes
- Wenn der UriBuilder ohne ContentObjectRenderer Kontext ausgeführt wird, wird nun eine Exception geworfen um stille Fehler zu vermeiden
- Die Bildaufbereitung für "Click to Enlarge" Popups überträgt die crop-Konfiguration nun korrekt
- Die "EnableFields" in Extbase-Abfragen für Relations (JOINs) werden nun korrekt ausgewertet, so dass die hidden/deleted/starttime usw. Felder dort nur erscheinen, wenn auch wirklich aktiviert.
Fluid
EXT:indexed_search
- Die Suchstatistik kann nun gezielt den Grund darstellen, warum eine Seite ggf. nicht indiziert wurde
- Der PSR14-Event "EnableIndexingEvent" kann nun auch zum Deaktivieren der Indizierung einer Seite genutzt werden
- Behebung einer falschen Ranking-Darstellung ("%INF") für Fälle, in denen eine Relevanz von 0 in einem Ergebnis berechnet wird
- Suchwörter werden nun für die Längenberechnung mit Multibyte-Zeichen (UTF-8) ausgewertet um korrekte Fehler in minimaler Zeichenlänge auszugeben
- Suchstatistiken werden nun pro Wort nur einmalig angezeigt (Vermeidung von Redundanz), und nicht pro IndexKonfiguration, in denen es vorkommen könnte
- Limitierung auf 255 Suchworttreffer pro Dokument (Datenbanktyp)
- Die Zählung der Wortvorkommen pro Dokument wird korrekt zurückgesetzt für jedes Dokument
- Wörter werden nun mit UTF-8 Zeichen korrekt in der Länge berechnet
- Beim Fehlen von "body" Tags in einem Dokument wird der "head" ausgewertet.
- Einige erweiterte Suchoptionen von `blind.xxx` werden nun korrekt ausgewertet
Backend: UI
- WissenswertEinschränkungen bei der Platzierung von Content-Elementen im Seitenmodul (mit dem (dis)allowedContentTypes feature) werden nun direkt bei Drag+Drop über Containern ausgewertet
- WissenswertVereinheitlichung der "Enter = Formularsubmit" Logik in Modals
- WissenswertButtons in der Datensatzliste können nicht mehr versehentlich durch "Enter" im Pagination-Bereich ausgelöst werden
- WissenswertDas Anlegen von Inhaltselementen, die in einer colPos nicht erlaubt sind, ist per Drag+Drop nicht mehr möglich. So kann direkt erkannt werden, ob ein Element in einer gewissen Spalte zulässig ist.
- Ein XLF-Sprachkey (das Label) für das Statistik-Modul wird nun korrekt referenziert und dargestellt
- Das "Navigationstitel"-Feld in der Funktion "Seiten sortieren" wird nun als Label richtig ausgelesen
- Die erlaubten Dateiendungen in der Datensatz- und Dateiliste werden nun konsistent dargestellt
- Das "Über TYPO3" Modul führt nun auch korrekt Erweiterungen auf, die kein eigenständiges "Obermodul" liefern
- Der Aufruf von teilbaren Links direkt ins Backend aus Szenarien, wo kein Session-Cookie übertragen werden könnte (SameSite=strict) erzeugt nun keine unnötige Login-Route/Formular mehr an
- Das kleine "Über TYPO3" Popup im Kopfbereich wertet die Wertigkeit einer Meldung nun korrekt aus (Hinweis/Warnung/Fehler), vor allem aus dem "Reports"-Modul
- Die Browser-"Popover API" wird nun für modale Popups genutzt, so dass eine bessere z-index Verarbeitung geschehen kann
- Optimierung der Rechte-Checks zum Editieren von Metadaten in IRRE-Containern
- Nutzung des Modal-Helpers (JavaScript) im "Database Compare"-Modul
- Der Suchbegriff in der Dateiliste wird nun nicht mehr in der URL zwischengeparkt, so dass ein neu eingegebener Suchbegriff nicht mehr mit dem alten Suchbegriff in der Paginierung o.ä. konfliktiert
- Das Seitenmodul zeigt nun korrekt ausgewerteten docheader/Icons an, auch wenn man von der Mehrsprachigkeits-Ansicht kam
- Zu lange Titel in Modal-Popups verdrängen den "Schließen"-Button nun nicht mehr
- Korrekte Extension-Icon/Namensauflösung (im Fallback und bei Nutzung von "ctrl.groupName") beim Erstellen neuer Datensätze
- Der "Übersetzen"-Button wird versteckt, wenn ein Element bereits via "l18n_parent" als übersetzt markiert wurde
- NULL-Werte in Seitentiteln werden auch in Randfällen jetzt im Seitenbaum mit "Ohne Titel" dargestellt
- Minimale Anpassung der Darstellung einzelner Backend-Notifications
- Der ColorPicker hat sich (mal wieder) mit dem Z-Index verkantet, und wurde (mal wieder) in seine Schranken verwiesen.
- Die TCA-Typspezifischen Label werden nun auch in FormEngine Headern/Labels mit allen label/label_alt fallbacks ausgewertet.
- Notifications werden nun, vor allem beim Keyboard-Bedienung / Fokusänderung nicht vorzeitig versteckt
- Fehlgeschlagene Datei-Uploads in der Dateiliste werden nun als Notification angezeigt, anstelle in der Upload-Dateiliste nur markiert zu werden
Backend: API / Core
- Sehr wichtigUser TSConfig Conditions auf den "backend.user" Context werden nun korrekt gegen den aktuellen User (statt bislang eines anonymen Users im Bootstrap-Prozess) ausgewertet
- Sehr wichtigEin "ALL_LANGUAGES" Marker als PHP-Klassenkonstante wird nun im Core für alle Stellen genutzt wo bislang "-1" eine Sonderstellung für Mehrsprachigkeit hatte. Dies ist eine Vorbereitung für eine künftige andere Handhabung der Auszeichnung von Inhaltselementen/Seiten für "alle Sprachen".
- WissenswertCookies werden nun mit den exakten Erstellungsparametern auch wieder gelöscht, um besser zu gewährleisten dass ein Browser den Cookie auch wirklich entfernt
- WissenswertAutomatische URL-Slug-Erneuerung für Unterseiten wendet nun korrekt die postModifier mit aus anstelle nur reine String-Ersetzungen durchzuführen
- WissenswertDer "Löschen"-Button im Dokheader beim Bearbeiten von Elementen als Redakteur (statt Admin) erscheint wieder
- WissenswertBookmarks zu Datensätzen von nicht mehr vorhandenen Extensions werfen keine Fehlermeldung mehr, sondern zeigen Dummydaten
- WissenswertDas "exclude" TCA-Setting für sys_file_reference.hidden wurde entfernt, so dass Redakteure mit Zugriff auf IRRE-Elemente diese nun immer verstecken können, und es keiner eigenständigen Rechtezuwertung bedarf.
- WissenswertSchemalose absolute URIs werden nun nicht mehr bei Nutzung von `forceAbsoluteUrl` mit dem aktuell genutzten Host/Port ausgestatet, sondern bleiben Schemalos
- Bilder werden nun nicht mehr auf eine Mindestbreite (minWidth) herunterskaliert, wenn eine explizite width/height Angabe fehlte und das Bild größer als diese Mindestbreite war.
- Das TCA wird nun bei Nutzung von "language:update" im Scheduler nicht mehr doppelt geladen, und nutzt bestehenden Container
- Die temporäre Nicht-Verfügbarkeit von FileStorages wird nun nicht mehr in einem `sys_registry` Eintrag gespeichert, sondern direkt in einem Hash-Cache, wo er einfacher invalidiert/ausgelesen werden kann
- Der `VisibilityAspect` kann nun mit immutable `with()` Methoden genutzt werden, um auch sicherzustellen dass etwaige Defaults und neue Properties des Objekts immer durchgeschleift werden.
- Das HTTP-Verb "QUERY" wird nun auch im PSR7-Request-Interface neben PUT/POST/PATCH/DELETE/GET unterstützt
- Das `VirtualAppPackage` (System Resource API Referenz für den "Projekt-Root", zur internen Identifizierung) wird auch in Randfällen nicht mehr als "aktive" Extension gewertet
- Vermeidung einer Race-Condition beim schreiben von "processed files"
- Bewusst (durch Extensions) deaktivierte eigene Buttons im "DocHeader" werden nun nicht mehr durch FormEngine reaktiviert
- Der DataHandler verändert nun nicht mehr den Inhalt von "TCAdefaults" beim Bearbeiten von Datensätzen, sondern setzt potentielle Änderungen nach jedem Datensatz zurück
- Verbessertes Fehlerhandling von `GeneralUtility::writeFile()` das keine unnötigen Exceptions mehr wirft
- Wenn im Seitenbaum eine Seite umbenannt wird deren Titel anhand von "nav_title" gebildet wird, wird nun genau dieses Feld abgespeichert, statt den Wert in "title" zu übertragen.
- Fehlermeldungen im Redis-SessionBackend werden nun geloggt
- Die Sortierungsreihenfolge in der Dateiliste wird nun korrekt in den "be_user.uc" Daten gespeichert
- Die Nutzung von `DebugUtility::debug()` zeigt nun im Titel der Debug-Box die Zeile und auslösenden Dateinamen, so dass versehentlich hinterlassene Debugaufrufe leichter gefunden werden können. Aber wer nutzt schon was anderes als XDebug zum debugging? ;-)
- Die "prepend_tname" TCA Option bei MM-Tabellen wird nun für die Datenbankmigration korrekt ausgewertet
- Ein itemsProcFunc Prozessor kann einen DataHandler-Workflow nun nicht mehr stören, falls dieser fehlschlägt
- Die Option "Clear frontend caches at midnight" funktioniert nun wieder, da vor kurzem die Standard-Cache-Lifetime von einem Tag auf ein Jahr hochgestellt wurde.
- Das Lowlevel-Backendmodul zur Datenbanksuche wirft keine Fehler mehr bei integer-basierten Relationswerten einer Tabelle beim ersten Aufruf
- Seiten mit doktype "Link" und Nutzung von Zahlen als URI-Fragment/Hash erzeugen keine Fehlermeldung mehr im Seitenlayout-Modul
- Der UpgradeWizard forciert nun die NULL-Migration von "imagewidth" und "imageheight" (falls noch nicht geschehen) in einem Aufwasch, um einen doppelten Datenbankvergleich zu vermeiden
- Der SoftRef-Typolink-Parser kann nun auch Links im Format "t3://record?identifier=tx_news&uid=99" interpretieren
- Vermeidung eines unnötigen leeren (bzw potentiell falschem) "Content-Length" HTTP Header in PSR-7 Responses
- Die Berechnung der User-Session LifeTime wird nun mit einer vereinfachten Abfrage durchgeführt
- Der Paginator nutzt nun ein sichereres Clamping für die max/min offsets
- Der Backend-Cookie `be_lastLoginProvider` wird nun korrekt angesprochen wenn es mehrere LoginProvider gibt
- Die Bookmark-Option `options.bookmarkGroups=0` wird nun korrekt ausgewertet, um die Gruppenfunktion zu deaktivieren
- Backend-Module die den URI-Parameter "id" für etwas anderes als eine Seiten-ID nutzen können nun dennoch den Root-TSConfig-Datensatz auswerten, anstelle diesen zu überspringen
- Der DataHandler kann auch beim Verschieben von Datensätzen Elemente die als "unique" definiert sind beim Umschreiben als History-Eintrag protokollieren, um eine vollständige Rückgängigmachung zu ermöglichen.
- MIME-Types können Parameter haben wie "video/mp4;codec=XYZ". Diese haben die Auswertung von MIME-Typen beim audio/video Tag-Renderer stören können, und stören jetzt nicht mehr.
- Die UserSettings werfen keine Fehler mehr wenn "titleLen" noch nicht persistiert wurde (oder in den Settings fehlt)
- Die Berechnung von Byte-Größen via `GeneralUtility::getBytesFromSizeMeasurement` gibt nun keine Werte über PHP_INT_MAX hinaus zurück (z.b. bei fehlerhaftem String-Parsing)
Backend: DBAL API
- WissenswertDie "select.uidInList()" Sortierung bei TypoScript-Datenbankabfragen ohne gezieltes "orderBy" ist nun standardmäßig nach Reihenfolge der UIDs in dem Funktionsaufruf sortiert, statt vorher "zufällig" (je nach Datenbanktyp) sortiert.
- Der GarbageCollection Scheduler-Task löscht Datensätze nun in Stapeln statt über einen einzigen großen DELETE-Befehl, um die Operation bei großen Datenmengen mit kürzeren Locks durchzuführen.
Backend: FAL API
- Beim Erzeugen von Storages in zwei parallelen Prozessen (race condition) wird verhindert dass eine doppelte Anlegung den Prozess scheitern lässt.
- Die FAL-API setzt die Permissions beim Erzeugen von RessourceStorages mittels API korrekt zurück, statt sie in einem potentiell falschen Zustand zu hinterlassen
- Die API-Methode `Folder->getFiles()` wertet nun Filter auch im Fall für "keine Filter" korrekt aus
- Der MetaDaten-Aspekt von FAL-Daten (Sprache/Workspaces) wird nun korrekt aktualisiert, wenn sich dieser Kontext zur Laufzeit ändert
Backend: CLI
- Der Event "TrackOpenDocumentsEventListener" von EXT:opendocs wird beim DataHandler-Processing nicht mehr falsch aufgerufen, wenn ein User wie "_cli_" gar keine Backend-Session besitzt.
- Das "redirects:integrity" CLI Kommando zeigt nun in der Spalte "Target" bei Konflikten die tatsächlich intern verarbeitete Ziel-URI.
Backend: FormEngine - Page Wizard
Backend: Flexforms
Backend: CKEditor / RTE
- Update auf CKEditor 5 v48 (Security Fixes, Safari macOS 27 Probleme)
- HTML-Sondertags (audio, video, embeds) werden nun auch korrekt als Content ausgewertet und nicht als leere Zeile gewertet, wenn sie alleine stehen
Backend: Extension Manager
- Sehr wichtigDownloads vom TER werden nun mit einem ZIP statt T3X Archiv durchgeführt, und es wird SHA256 Hashing nun genutzt
- WissenswertDer ExtensionManager lädt nun nur noch einen Ausschnitt der Repository-Daten, wenn nicht wirklich alle Datensätze benötigt werden
- Der ExtensionManager kann nun den Composer-Paketnamen von Extensions auslesen und intern speichern/verwalten
- Ein neues `ExtensionCatalogue` Interface stellt sicher, dass Metadaten von Extensions im Manager definiert/genutzt werden können
- Der Extension-Manager liest die ext_emconf.php nicht mehr aktiv aus sondern bezieht die Metadaten aus anderen Stellen
Backend: Code Scanner
- WissenswertDer Extension-Scanner ist nun ein eigenständiger Service, und kann so auch z.B. von CLI-Tools leichter eingebunden werden
- Verbesserung des CodeScanners für "returnWebmounts" migration
- Konstanten mit/ohne NULL-Werten werden in den Matchern nun gezielter ausgewertet
- Vermeidung von Crashes beim Scanning von first-class Callables (`Foo::bar(...)`, also mit drei Punkten).
Backend: EXT:reports
- Minimale Datenbankoptimierung zum schnelleren Auslesen, ob der Referenz-Index Einträge enthält
- Der Status-Report berichtet nun auch über die konfigurierte MySQL-Wortlänge für die Indexsuche
Backend: EXT:workspaces / History
- WissenswertDie TCA-Option "versioningWS_alwaysAllowLiveEdit" wird nun nur noch für Tabellen ausgewertet, die NICHT workspace-spezifisch sind.
- Aus dem Frontend-Preview heraus können nun auch direkt Veröffentlichungen vorgenommen werden
- Verschobene Datensätze werden nun nicht mehr allen Sprachen zugeordnet, sondern gezielt nach einer Sprache gefiltert (so wie neue Datensätze)
- Der PSR-14 Event `AfterDataGeneratedForWorkspaceEvent` enthält nun auch einen `actions` Eintrag mit dem eigene JavaScript-Aktionen für Datensatzlisten-Buttons ausgeführt werden können.
- Ungültige Seiten (z.B. aufgrund von Rechtechecks) können eine Exception werfen, die nun gezielt abgefangen wird um den DataHandler/Publishing-Prozess nicht hart abzubrechen
- Wenn es für einen Timestamp mehrere History-Einträge gibt werden diese nun konsistent nach UID sortiert
- Beim Kopieren von IRRE-Kinddatensätzen wird nun die Seiten-UID statt PID vom Live-Datensatz verwendet (oder so)
- Wenn eine übersetzte Seite in einem Workspace kopiert wurde, erhielten die Dateireferenzen und IRRE-Kindelemente der übersetzten Kopie die UID der übersetzten Seite als PID - anstelle der PID der Seite in der Standardsprache: Die Live-ID-Auflösung überschrieb die bereits ermittelte PID der Seite in der Standardsprache. Workspace-Bugs in a Nutshell. :-)
- In der History-Diff-Ansicht von Datensätzen werden MM-Relationen nun korrekt aufgelöst und als Unterschiede dargestellt
Backend: EXT:scheduler
- WissenswertTäglich auszuführende Tasks werden beim Wechsel der Zeitzone nicht versehentlich um eine Stunde verschoben
- Die Beschreibung von Tasks (im englischen) wurden überarbeitet und vereinheitlicht
- Die API-Methode für `SchedulerTaskRepository->add` wertet die nativen Task-Parameter nun korrekt beim speichern und aktualisieren aus
Backend EXT:recycler
- Recycler von Unterordnern werden nun auch beim Cleanup-Task berücksichtigt
- Recycler Rekursion von recyclenden Recycler-Ordnern entcycled
- Das verschieben einer Datei in den Recycler passt nun das Modifikationsdatum an, so dass bei automatischer GarbageCollection ein Objekt nicht sofort entfernt wird, wenn es im Papierkorb landet
Backend EXT:linkvalidator
- Links im Format "t3://page?uid=1#2" zu Content-Elementen werden korrent im Linkvalidator dargestellt
- Der Linkvalidator prüft nur noch Felder, die für gewisse Seitentypen/Inhaltstypen (CType) auch tatsächlich (noch) genutzt werden
- Vermeidung von doppelter Link-Interpretation bei SoftReference-Parsing
- Bei Fehlern im Versand des Linkvalidator-Reports wird dieser beim nächsten Mal neu erstellt, anstelle übersprungen zu werden.
Backend EXT:impexp
EXT:redirects
- Die Listenansicht der Redirects zeigt jetzt auch die Ersteller-Information an (nicht nur in der Detailansicht)
- Redirect-URIs die ein "[" oder "]" in der URI enthalten können für Variablenzuweisungen werden nun auch in deren enkodierten Form ausgewertet und zugeordnet
Backend EXT:styleguide
- Performance-Optimierung der Styleguide-Demodaten-Erzeugung (vor allem Passwörter)
- Die Styleguide-ViewHelper-Beispiele können nun direkt in die Zwischenablage (vom Client OS) übertragen werden
