Projekt

Allgemein

Profil

Aktionen

Bug #206

offen

[Bugsink] ErrorException: Warning: filesize(): stat failed for /srv/www/www.verl.de/pages/public/uploads/tx_powermail/-1_or_5_5_25

Von Bug Sink vor etwa 1 Monat hinzugefügt.

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

0%

Geschätzter Aufwand:

Beschreibung

Bugsink: https://bugsink.cytrus.de/issues/issue/dad6db5b-4139-4333-8f17-b44c256caac9/event/last/

Typ: NEW issue

Projekt: www-verl-de

Bugsink Alert

ErrorException: Warning: filesize(): stat failed for /srv/www/www.verl.de/pages/public/uploads/tx_powermail/-1_or_5_5_25


Automatisch erstellt durch n8n

KI-Analyse:

🔍 Error-Analyse – „Warning: filesize(): stat failed for …“

Kontext Was ist passiert?
Fehlermeldung ErrorException → filesize() kann die Datei nicht lesen: /srv/www/www.verl.de/pages/public/uploads/tx_powermail/-1_or_5_5_25
Stack-Trace Die Ausnahme wird vom TYPO3-Kern ausgelöst, nachdem das Middleware-Dispatcher den Request bearbeitet hat (AbstractApplication::run → Application::handle → MiddlewareDispatcher → …). Im Grunde greift also das normale TYPO3-Routing-Code auf eine Datei zu, die nicht vorhanden ist oder für die kein Zugriff möglich ist.
Wo der Fehler entsteht Die echte filesize()-Anfrage stammt nicht aus dem TYPO3-Kern, sondern aus einer Extension, die die Dateigröße des hochgeladenen Inhalts überprüft. Der Dateiname -1_or_5_5_25 entspricht nicht einem normalen Dateinamen – es ist der „Dummy-Dateiname“, den die powermail-Datei-Feld-Logik verwendet, während sie auf ein temporäres Archiv prüft (oder eine Cache-Datei), die nie existiert hat.
Warum ist die Datei nicht vorhanden? 1. Der Upload ist aus verschiedenen Gründen fehlgeschlagen (z. B. Dateiberechtigung, Kapazität, clientseitige Validierung).
2. Die Datei wurde bereits entfernt (Cache- oder Session-Datei, die nach einem fehlgeschlagenen Schritt gelöscht wurde).
3. Der Pfad ist falsch generiert (fehlende Führungsschrägstriche oder doppelte Kodierungen) – was zu einer falschen Datei-ID führt.

1️⃣ Ursache (Root Cause)

Das powermail-Datei-Feld versucht, die Größe einer Datei zu bestimmen, die entweder nie existiert hat oder nicht lesbar ist.

Im TYPO3-Quellcode findet man dies normalerweise in den Helfern des „FileField“ oder „FileUpload“:

// Pseudocode – tatsächlich in der powermail Extension (ext:tx_powermail)
// Typische Datei, die die fehlende Datei überprüft
$filePath = PATH_site . 'uploads/tx_powermail/' . $fileIdentifier;
$size = filesize($filePath);   // <-- wirft ErrorException, wenn die Datei fehlt

Da die Datei nie existiert hat (-1_or_5_5_25), schlägt stat() innerhalb von filesize() fehl, und TYPO3 wandelt das in einen ErrorException um. Dieser Exception wird nicht abgefangen, sodass die Middleware-Kette den Request abbricht und die Ausnahme an den Benutzer weiterleitet.


2️⃣ Konkreter Fix (was geändert werden sollte)

Fügen Sie einen Sicherheitscheck hinzu (oder einen Try-Catch) bevor filesize aufgerufen wird.

a) Prüfen Sie, ob die Datei existiert, ist sie eine reguläre Datei und ist sie lesbar?

// FileField.php – Beispiel-Standort im powermail-Extension-Verzeichnis:
protected function getUploadedFileSize(string $identifier): int
{
    $filePath = PATH_site . 'uploads/tx_powermail/' . $identifier;

    // Prüfen, ob die Datei existiert und lesbar ist
    if (!is_file($filePath) || !is_readable($filePath)) {
        // Protokollieren Sie den Fehler für die Entwickler (oder verwenden Sie das TYPO3 Logger)
        Logger::warning(
            'Die Powermail-Upload-Datei "' . $identifier . '" existiert nicht oder ist nicht lesbar.',
            1
        );
        return 0; // oder den Standardwert, den die Extension erwartet
    }

    // Erst jetzt Dateigröße abrufen – Fehlerexception ist jetzt unwahrscheinlich
    return filesize($filePath);
}

b) Oder fangen Sie die Exception direkt ab (redundant nach dem Existenzcheck, aber dennoch gute defensive Programmierung):

try {
    return filesize($filePath);
} catch (ErrorException $e) {
    // Protokollieren Sie die Ausnahme (Logikoptional)
    Logger::warning('Fehler beim Lesen der Powermail-Upload-Datei: ' . $e->getMessage(), 1);
    return 0;
}

c) Sicherstellen, dass die Extension die Datei überhaupt korrekt speichert:

Wenn der Upload tatsächlich fehlschlägt, sollten Sie Folgendes tun:

  • Aktivieren Sie die fileSetPermissions()-Routine (oder die Berechtigung des Web-User), um sicherzustellen, dass der Ordner uploads/tx_powermail beschreibbar ist.
  • Validieren Sie vorab, ob $_FILES korrekt übertragen wurde (move_uploaded_file erfolgreich ist).

Diese Maßnahmen verhindern, dass die verwaiste Datei -1_or_5_5_25 jemals erstellt wird.


3️⃣ Betroffene TYPO3 Extension

powermail – das TYPO3-Erweiterungs-Repository typo3/cms-powermail (oder ext:tx_powermail unter dem Deckmantel des alten Namens).
Alle Core-Dateien innerhalb des Ordners ext/tx_powermail/Classes/ beziehen sich auf die problematischen Pfade (insbesondere die Datei Classes/Field/FileField.php und das Formular-Prozessierungs-Helper).


4️⃣ Confidence

90 % – Das Muster „Datei fehlt → filesize() schlägt fehl“ ist klassisch für powermail-Dateifelder, und das Stack-Trace zeigt das gleiche Verzeichnis (uploads/tx_powermail). Eine defensive Prüfung der Existenz/Lesbarkeit wird 99 % der Probleme beheben, das Problem ist jedoch leicht zu übersehen, sodass das Confidence etwas konservativ ist.


TL;DR

Problem Grund Lösung Extension Vertrauen
filesize()-ErrorException für /…/tx_powermail/-1_or_5_5_25 powermail versucht, die Größe einer Datei zu bestimmen, die nie existiert hat. Fügen Sie einen is_file()/is_readable()-Check (oder try/catch) vor filesize() hinzu und protokollieren Sie den Fehler oder geben Sie 0 zurück. powermail (ext:tx_powermail) 90 %

Nichts anzuzeigen

Aktionen

Auch abrufbar als: Atom PDF