Löschen von Dateien mit &-Zeichen funktioniert nicht

Hast du einen Fehler in der aktuellen Version gefunden ? Diesen kannst du uns hier mitteilen und uns bei der Fehlersuche helfen.
Antworten
magnet
Beiträge: 222
Registriert: 14. Feb 2012, 15:40

Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von magnet »

Technische Angaben: Admidio 3.0.2
Verwendete Plugins: appmidio, awards, birthday, login-form, sidebar (jeweils V3)
Browser: Firefox 40.0.3
BS: Windows 10

Löscht man im Downloadmodul Dateien mit einem &-Zeichen im Namen, erscheinen diese dann unter "Nicht verwaltete Dateien". Einzige Möglichkeit ist dann, auf "Zur Datenbank hinzufügen" zu klicken, was zur Meldung "Der ausgewählte Dateiname enthält ungültige Zeichen!" führt. Das kann man im Demo-Bereich so auch nachstellen.

Also muss man derzeit die Dateien manuell auf dem Server löschen.

Grüße,
magnet
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von XimeX »

Kannst du mal nachschauen was im feld "fil_name" in tabelle "TBL_FILES" in der DB steht bei einer datei die ein & hat?

Steht da der normale name oder ist er "escaped"? Also zb "test\&test.txt"
magnet
Beiträge: 222
Registriert: 14. Feb 2012, 15:40

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von magnet »

XimeX hat geschrieben:Kannst du mal nachschauen was im feld "fil_name" in tabelle "TBL_FILES" in der DB steht bei einer datei die ein & hat?

Steht da der normale name oder ist er "escaped"? Also zb "test\&test.txt"
Moin XimeX,

in der DB steht der "normale Name", exakt so wie die Datei benannt ist. Versuche ich die Datei zu löschen, wird der Eintrag auch korrekt aus der DB entfernt, der Löschbefehl der Datei selbst scheint aber fehlzuschlagen und so wird sie bei den unverwalteten Dateien angezeigt.

Grüße,
magnet
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von XimeX »

Hast du für den adm_my_files ordner die berechtigungen richtig gestellt?
Funktioniert es bei allen anderen Dateien sie richtig zu löschen?

Also der löschbefehl für die datei ist in der datei: adm_program/system/classes/tablefile.php
Dort in Zeile 41-49

Zeile 44 sollte die Datei vom Filesystem löschen.
Zeile 48 ("parent::delete()") löscht den DB eintrag.
magnet
Beiträge: 222
Registriert: 14. Feb 2012, 15:40

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von magnet »

XimeX hat geschrieben:Hast du für den adm_my_files ordner die berechtigungen richtig gestellt?
Funktioniert es bei allen anderen Dateien sie richtig zu löschen?

Also der löschbefehl für die datei ist in der datei: adm_program/system/classes/tablefile.php
Dort in Zeile 41-49

Zeile 44 sollte die Datei vom Filesystem löschen.
Zeile 48 ("parent::delete()") löscht den DB eintrag.
Ja, die Berechtigungen sind korrekt und Dateien ohne & lassen sich problemlos löschen. Wie gesagt, der Fehler lässt sich auch in der Online-Demo schnell reproduzieren.

In den Quellcode habe ich noch nicht schauen können, weil ich noch mit anderen Problemchen gekämpft habe.

Grüße,
magnet
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von XimeX »

Erstell mal bitte folgende datei und führe sie aus und sag ob das funktioniert.
ausführen mit "php namedertestdatei.php" in einer console oder aufrufen der url.

Code: Alles auswählen

<?php
unlink('relativer/pfad/zur/dateiMit&Zeichen.jpg');
?>
ist es auch egal an welcher stelle das & zeichen steht?
Welche PHP version hast du?
magnet
Beiträge: 222
Registriert: 14. Feb 2012, 15:40

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von magnet »

XimeX hat geschrieben:Erstell mal bitte folgende datei und führe sie aus und sag ob das funktioniert.
ausführen mit "php namedertestdatei.php" in einer console oder aufrufen der url.

Code: Alles auswählen

<?php
unlink('relativer/pfad/zur/dateiMit&Zeichen.jpg');
?>
ist es auch egal an welcher stelle das & zeichen steht?
Welche PHP version hast du?
Ja, so funktioniert es, da ich genau über diesen Weg die Dateien gelöscht habe.

Ob das &-Zeichen vorne oder mittig steht, ist egal.

PHP-Version: 5.4.45-0+deb7u1
PHP-Version eures Demo-Spielplatzes: 5.5.26-nmm1

Grüße,
magnet
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von XimeX »

Ich glaube ich hab das problem gefunden. Möglich das es auch nur ein Teil des Problems ist.
passe mal folgendes an:
adm_program/system/string.php Zeile 161-195

Code: Alles auswählen

function strValidCharacters($string, $checkType)
{
    if(strlen(trim($string)) > 0)
    {
        switch($checkType)
        {
            case 'email':
                $validChars = '/^[a-z0-9áàâåäæcccçéèeênnñóòôöõøœúùûüß\.\-_@]+$/';
                break;
            case 'file':
                $validChars = '/^[a-z0-9áàâåäæcccçéèeênnñóòôöõøœúùûüß\.\-_$\&!\?\+ ]+$/';
                break;
            case 'noSpecialChar': // eine einfache E-Mail-Adresse sollte dennoch moeglich sein (Benutzername)
                $validChars = '/^[a-z0-9\.\-_\+@]+$/';
                break;
            case 'url':
                $validChars = '/^[a-z0-9áàâåäæcccçéèeênnñóòôöõøœúùûüß\.\-_:/#\?=%\&!]+$/';
                break;
        }

        // check if string contains only valid characters
        if(preg_match($validChars, admStrToLower($string)))
        {
            if($checkType == 'email')
            {
                // check structure of email address
                return preg_match('/^[^@]+@[^@]+\.[^@]{2,}$/', trim($string));
            }
            return true;
        }
    }
    return false;
}
magnet
Beiträge: 222
Registriert: 14. Feb 2012, 15:40

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von magnet »

XimeX hat geschrieben:Ich glaube ich hab das problem gefunden. Möglich das es auch nur ein Teil des Problems ist.
passe mal folgendes an:
adm_program/system/string.php Zeile 161-195

Guten Abend!

leider besteht das Problem auch nach der gewünschten Änderung. :(

Grüße,
magnet
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von XimeX »

Hab das jetzt noch etwas getestet. Sehr seltsam. Sieht mir schon fast nach einen PHP Bug aus. Über die CommandLine ausgeführt funktioniert es aber über die Webseite nicht. Kannst mal eine datei "test.php" im admidio hauptordner erstellen mit folgenden inhalt:

Code: Alles auswählen

<?php

require_once('adm_program/system/classes/admexception.php');
require_once('adm_program/system/string.php');

$filename = urldecode('test&_file.png');
var_dump(admStrIsValidFileName($filename, true));
und dann ausführen mit "php test.php"

es sollte dann "bool(true)" stehen in der ausgabe.

https://github.com/Admidio/admidio/issues/168
magnet
Beiträge: 222
Registriert: 14. Feb 2012, 15:40

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von magnet »

XimeX hat geschrieben: und dann ausführen mit "php test.php"
Hi,

Ich bekomme als Ausgabe ein "int(1)" zurück.

Grüße,
magnet
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von XimeX »

Ups mein fehler. Ja sollte int(1) liefern. Im master branch liefert er "bool(true)" ;-)
@Fasse: Hast du eine Ahnung warum es über die Konsole geht aber über den Browser aufgerufen nicht?
Benutzeravatar
fasse
Administrator
Beiträge: 6229
Registriert: 12. Nov 2005, 16:06

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von fasse »

Hallo zusammen,

der Fehler ist in der 3.0.3 gehoben, welche wir Ende der Woche veröffentlichen wollen.

Das Problem ist, dass & ein spezielles Html Zeichen ist, was in manchen Funktionen umgewandelt wurde zu & und dieser abgeänderte Dateinamen dann nicht gefunden wurde.

Viele Grüße
Fasse
magnet
Beiträge: 222
Registriert: 14. Feb 2012, 15:40

Re: Löschen von Dateien mit &-Zeichen funktioniert nicht

Beitrag von magnet »

fasse hat geschrieben:Hallo zusammen,

der Fehler ist in der 3.0.3 gehoben, welche wir Ende der Woche veröffentlichen wollen.

Das Problem ist, dass & ein spezielles Html Zeichen ist, was in manchen Funktionen umgewandelt wurde zu & und dieser abgeänderte Dateinamen dann nicht gefunden wurde.

Viele Grüße
Fasse
Alles klar, Danke!

Grüße,
magnet
Antworten