Falscher erhaltener Dateityp in getMimeType() bei SVG möglich

  • Bei der Prüfung von SVG-Dateien via getMimeType im FileUtil kann es zu einem fehlerhaften Ergebnis kommen. Das liegt dabei an der fehlerhaften Ausgabe des genutzten $finfo->file().

    https://github.com/WoltLab/WCF…l/FileUtil.class.php#L515


    Dabei wird eine SVG-Datei, welche nicht mit <?xml version="1.0" encoding="utf-8"?> beginnt, nicht als image/svg+xml eingestuft, sondern als text/html. In komprimierten SVG-Dateien wird diese Zeile jedoch oftmals entfernt, da sie auch laut Spezifikation nicht „required“ ist, sondern nur genutzt werden sollte („should“).


    Proof of Concept:

    PHP: finfo-proof.php
    <?php
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime = $finfo->file('logo.svg');
    $mime2 = $finfo->file('logo_without.svg');
    var_dump($mime, $mime2);

    Die beiden Dateien sind anbei.


    Die Ausgabe ist dabei:

    Code
    finfo-proof.php:5:string 'image/svg+xml' (length=13)
    finfo-proof.php:5:string 'text/html' (length=9)


    Die erwartete Ausgabe sollte sein:

    Code
    finfo-proof.php:5:string 'image/svg+xml' (length=13)
    finfo-proof.php:5:string 'image/svg+xml' (length=13)

    Das Problem kann sowohl in WoltLab Suite Core 3.0 als auch in WoltLab Suite Core 3.1 reproduziert werden.

  • Marcel Werk

    Added the Label Won’t fix
    • Official Post

    Das ist wenn ein Fehler in der Fileinfo PHP-Extension bzw. in der dahinter liegenden Bibliothek und sollte entsprechend dort als Fehler gemeldet werden. Ich wüsste ehrlich gesagt nicht, wie wir das PHP-seitig abfangen sollten (auf die Dateiendung kann man sich hier nicht verlassen).

    Marcel Werk
    WoltLab CEO