contao/test — Issue #2621: Controller::getImage() unvollständige Prüfung auf vorhandene Datei
Author: importer
Created: 2011-11-29 09:59:37+00:00
State: closed
Labels: Defect, frontend

**Kurzfassung**
In `Controller::getImage()` wird lediglicht mit [file_exists()](http://de2.php.net/file_exists) geprüft, ob der übergebene Pfad zur Datei existiert. Davon nicht abgedeckt ist die Übergabe eines Pfades zu einem Ordner, weshalb es bei einer Übergabe eines Pfades zu einem Ordner zum Werfen einer Ausnahme kommt.

**Detailierte Beschreibung mit Fallbeispiel**
Zur Prüfungen ob die übergebene Datei existiert, wird lediglich die PHP-Funktion [file_exists()](http://de2.php.net/file_exists) verwendet. Sie liefert jedoch auch für einen existierenden Ordner `true` zurück.

Das kann insofern ein Problem darstellen, wenn als Pfad lediglich ein Ordner angegeben wird, statt eine Datei. Dann wird versucht ein Objekt vom Typ `File` zu erstellen. Der Konstruktur der entsprechenden Klasse prüft richtigerweise, ob es sich beim übergebenen Pfad auch wirklich um eine Datei handelt.

Das Problem ist diskutabel. Jedoch bin ich der Meinung, dass bereits vor dem instanziieren des `File`-Objekts mittels [is_file()](http://de2.php.net/is_file) geprüft werden sollte, ob es sich auch wirklich um eine Datei handelt.

Ein Beispiel in dem diese Problematik eine Rolle spielt wäre ein Formular mit HTML E-Mail Bestätigung in der ein im Formular hochgeladenes Bild (optional) direkt eingebunden werden soll. Für die HTML E-Mail und anderer nützlicher Funktionen wurde die Erweiterung [EFG](http://www.contao.org/erweiterungsliste/view/efg.html) eingesetzt.

Folgender HTML-Code wäre dafür beispielhaft nötig:

```
{if '{{form::photo}}' != ''}
{{image::tl_files/upload/{{form::photo}}?width=300&height=300&mode=proportional}}
{endif}
```

Wenn ein Foto ausgewählt wird, funktioniert alles tadellos.
Sollte jedoch kein Foto ausgewählt werden (im Formular selbst ist das entsprechende Feld als optional gekennzeichnet), so wird dem `image`-InsertTag lediglich `tl_files/upload/` als Pfad zur Bilddatei übergeben, was letztlich im o.g. Verhalten endet.

**Patch**
Als Anhang ein in Frage kommender Patch für die Controller.php (Rev commit:62874796cc6487c2c92f835c03ca0972) aus dem aktuellen Trunk, der Abhilfe schafft.

Ein Loggen dieser Situation sehe ich nicht als notwendig an. Der Patch ist auch entsprechend aufgebaut.

**Formelles**
Ich habe das Ticket als Defect eingestuft gleichwohl keine enorme Dringlichkeit zur Behebung besteht, da es mittels eigenem InsertTag ein funktionierenden und updatesicheren Workaround gibt.

[Download the attachments](http://www.contao.org/tl_files/tickets/2621.zip "Download the attachments of this ticket")

--- _Originally created by michael.g on October 17th, 2010, at 04:31pm (ID 2621)_