Ce qui permet par exemple de récupérer un titre complet à partir d'un fichier de nom : "L'été, il fait beau !"
Ça marche très bien par la fonction d'upload de fichiers de SPIP.
Mais ça ne marche pas avec la DropZone du plugin HTML5Upload.
En traçant, j'ai fini par comprendre que c'était à cause de CVTUpload qui fait un basename sur le nom des fichiers et perd donc le nom original du fichier.
Je n'ose pas, sans avis éclairé, remplacer le basename par le même traitement que medias.
Je ne crois pas que ton problème ait un rapport avec un basename() dans cvt_upload.
Les 2 seules occurences de basename() correspondent à du préformatage de fichiers préchargés dans le charger() du formulaire, et aucunement au traitement sur les documents envoyés.
Il faudrait pour commencer ne pas mélanger les questions, et vérifier que ton problème se produit avec CVTUpload seul.
Je pense que ça doit être partiellement le cas car cvt_upload fait un prénettoyage du nom du fichier en supprimant par exemple les espaces.
Mais comme « ça marche pas » c’est pas très descriptif, ça n’aide pas à comprendre si c’est seulement le nettoyage du nom du fichier qui est problématique ou si il y a autre chose.
Bref en effet, tu seras avisé de ne pas modifier cvt_upload, qui est du code sensible, notamment en terme de sécurité, de tester avec cvt_upload seul, et d’exposer un cas test complet sur lequel il sera possible de reflechir à plusieurs.
(car à ma connaissance cvt_upload ne mets pas les documents en base de donnée, donc je ne vois pas très bien comment on arriverai au titrer() de medias…)
--
Cédric
Le 24 oct. 2018 à 22:57 +0200, RealET <real3t@gmail.com>, a écrit :
Ce qui permet par exemple de récupérer un titre complet à partir d'un
fichier de nom : "L'été, il fait beau !"
Ça marche très bien par la fonction d'upload de fichiers de SPIP.
Mais ça ne marche pas avec la DropZone du plugin HTML5Upload.
En traçant, j'ai fini par comprendre que c'était à cause de CVTUpload
qui fait un basename sur le nom des fichiers et perd donc le nom
original du fichier.
Je n'ose pas, sans avis éclairé, remplacer le basename par le même
traitement que medias.
Je ne crois pas que ton problème ait un rapport avec un basename() dans cvt_upload.
Les 2 seules occurences de basename() correspondent à du préformatage de fichiers préchargés dans le charger() du formulaire, et aucunement au traitement sur les documents envoyés.
Il faudrait pour commencer ne pas mélanger les questions, et vérifier que ton problème se produit avec CVTUpload seul.
Je pense que ça doit être partiellement le cas car cvt_upload fait un prénettoyage du nom du fichier en supprimant par exemple les espaces.
Mais comme « ça marche pas » c’est pas très descriptif, ça n’aide pas à comprendre si c’est seulement le nettoyage du nom du fichier qui est problématique ou si il y a autre chose.
Bref en effet, tu seras avisé de ne pas modifier cvt_upload, qui est du code sensible, notamment en terme de sécurité, de tester avec cvt_upload seul, et d’exposer un cas test complet sur lequel il sera possible de reflechir à plusieurs.
(car à ma connaissance cvt_upload ne mets pas les documents en base de donnée, donc je ne vois pas très bien comment on arriverai au titrer() de medias…)
--
CVT Upload gère uniquement le fait que les fichiers temporaires d'envoi de PHP sont stockés dans tmp/cvt-upload, ce qui permet en cas d'erreur lors du premier envoi de formulaire de faire un second envoi sans avoir à renvoyer les fichiers.
Et effectivement il fait quelques petits traitements:
- nettoyage des espaces
- modification de $_FILES en conséquence
C'est tout. Le reste, à savoir ce qui arrive au fichier envoyé, dépend du traitement du formulaire, que CVT Upload soit présent ou pas.
Ca peut être un stockage en BDD (Formulaire upload HTML5), un stockage dans un dossier (Formidable), un envoi par courriel (Formidable), mais c'est indépendant.
Je ne crois pas que ton problème ait un rapport avec un basename() dans cvt_upload.
Les 2 seules occurences de basename() correspondent à du préformatage de fichiers préchargés dans le charger() du formulaire, et aucunement au traitement sur les documents envoyés.
Il faudrait pour commencer ne pas mélanger les questions, et vérifier que ton problème se produit avec CVTUpload seul.
Je pense que ça doit être partiellement le cas car cvt_upload fait un prénettoyage du nom du fichier en supprimant par exemple les espaces.
Mais comme « ça marche pas » c’est pas très descriptif, ça n’aide pas à comprendre si c’est seulement le nettoyage du nom du fichier qui est problématique ou si il y a autre chose.
Bref en effet, tu seras avisé de ne pas modifier cvt_upload, qui est du code sensible, notamment en terme de sécurité, de tester avec cvt_upload seul, et d’exposer un cas test complet sur lequel il sera possible de reflechir à plusieurs.
Oh ça oui, j'ai bien compris que c'était un plugin hyper sensible en termes de sécurité.
(car à ma connaissance cvt_upload ne mets pas les documents en base de donnée, donc je ne vois pas très bien comment on arriverai au titrer() de medias…)
Et le fichier nommé L'été, il fait beau !.txt
A bien donné comme titre "L'été, il fait beau !"
Alors qu'avec la version SVN de UploadHTML5, le même fichier donne ce titre : "l_ete_il_fait_beau_"
Je ne suis pas du tout certain que ce nettoyage soit pertinent dans cvt-upload cela dit.
Le commentaire laisse penser que le $nom nettoyé a été utilisé comme nom de fichier, mais la le tmp_name est généré par tempnam(), donc il me semble bien que le $nom qui est injecté dans le name du $_FILES pourrait rester conforme à ce qui été envoyé par l’utilisateur
Les éventuels nettoyages devraient se faire ensuite ultérieurement, selon l’utilisation faite du nom du fichier.
Maieul qu’en penses-tu ?
--
Cédric
Le 25 oct. 2018 à 09:58 +0200, RealET <real3t@gmail.com>, a écrit :
Cerdic a écrit le 25/10/2018 à 09:23 :
> Je ne crois pas que ton problème ait un rapport avec un basename() dans
> cvt_upload.
> Les 2 seules occurences de basename() correspondent à du préformatage de
> fichiers préchargés dans le charger() du formulaire, et aucunement au
> traitement sur les documents envoyés.
>
> Il faudrait pour commencer ne pas mélanger les questions, et vérifier
> que ton problème se produit avec CVTUpload seul.
> Je pense que ça doit être partiellement le cas car cvt_upload fait un
> prénettoyage du nom du fichier en supprimant par exemple les espaces.
> Mais comme « ça marche pas » c’est pas très descriptif, ça n’aide pas à
> comprendre si c’est seulement le nettoyage du nom du fichier qui est
> problématique ou si il y a autre chose.
>
> Bref en effet, tu seras avisé de ne pas modifier cvt_upload, qui est du
> code sensible, notamment en terme de sécurité, de tester avec cvt_upload
> seul, et d’exposer un cas test complet sur lequel il sera possible de
> reflechir à plusieurs.
Oh ça oui, j'ai bien compris que c'était un plugin hyper sensible en
termes de sécurité.
>
> (car à ma connaissance cvt_upload ne mets pas les documents en base de
> donnée, donc je ne vois pas très bien comment on arriverai au titrer()
> de medias…)
C'est pas CVTUpload seul, c'est CVTUpload+UploadHTML5 (de Phenix)
Donc, en traçant, je suis arrivé à : https://zone.spip.net/trac/spip-zone/browser/spip-zone/_core_/branches/spip-3.2/plugins/medias/action/ajouter_documents.php#L152
Et j'ai pu vérifier que $nom_envoye est déjà sous la forme minuscules
seules et _ à la place des caractères espaces et "!" supprimé.
Et le fichier nommé L'été, il fait beau !.txt
A bien donné comme titre "L'été, il fait beau !"
Alors qu'avec la version SVN de UploadHTML5, le même fichier donne ce
titre : "l_ete_il_fait_beau_"
Comme j’ai un site actuellement ou j’utilise UploadHTML5 (d’ailleurs sur tous …) ET qui est pour une illustratrice, j’utilise la fonction titre_document
vu que son site n’est que des documents … bref pour faire court @chez moi ça marche
si on ajoute a mes_options
// Titrer les documents joints à partir du nom du fichier
//
define('_TITRER_DOCUMENTS', true );
Comme j’ai un site actuellement ou j’utilise UploadHTML5 (d’ailleurs sur tous …) ET qui est pour une illustratrice, j’utilise la fonction titre_document
vu que son site n’est que des documents … bref pour faire court @chez moi ça marche
Est-ce que tu as vérifié avec un document dont le nom était :
"C'est l'été !" ?
Si ça te donne "c_est_l_ete_" c'est pas bon !
titre : bretelles fines robe noire de ce re monie avec ceinture pour l e te
donc en fait c'est pas que ça marche pas, c'est juste que ça ne marche pas comme attendu avec des caractères spéciaux comme les accents et les signes de ponctuation dans les noms de fichiers …
effectivement même si ce n'est pas courant (voir recommandé) dans les noms de fichier, ça peut être bien dans ce cas présent …
Je dis ça, je dis rien, mais BigUp n'utilise pas cvt-upload :
Parce que justement les deux sont codés modulairement et ne font que ce
qui leur incombe. Ils peuvent donc être utilisés *ensemble* et ça marche
très bien.
BigUp s'occupe de l'upload, puis on récupère un FILES classique. Et
ensuite cvt-upload prend le relais et utilise ce FILES pour faire ses
tâches à lui (= stocker temporairement si on est bloqué dans
verifier()). On termine de nouveau avec un FILES classique à la fin,
utilisable pour chaque besoin différent dans le traiter(), comme s'il
n'y avait eu ni l'un ni l'autre, tout est transparent.
Du coup, que ce soit noyau ou plugin, on peut en théorie utiliser des
FILES dans un traiter() comme si on avait des champs basiques, et on
peut ajouter/retirer ces deux plugins qui améliorent l'UX mais sans rien
demander à changer dans le code final.
[Troll]
Moi j'dis c'est grave ! Gros problème problème de sécurité ! Holala
[/Troll]
Je n’ai pas compris le troll ?
Pour répondre plus finement,
1) BigUp conserve en mémoire le nom d’origine du fichier (mais ne stocke pas sur le disque le fichier temporaire avec ce nom) ; il utilise un fichier séparé contenant quelques infos du fichier.
2) BigUp est tolérant à CVT-Upload, mais s’en passe très bien : il gère aussi la conservation du fichier si une erreur est présente lors des vérifications (et restituera bien le nom d’origine du fichier pour les traitements).
Il fait donc aussi le même travail que CVT-Upload sur ce point là (enfin seulement si _bigup_rechercher_fichiers est déclaré dans le charger, mais ce point précis pourrait être systématique s’il y a des fichiers postés).
Si CVT-Upload est présent, par contre, celui-ci prendra la main sur BigUp (ie: il déplacera le fichier temporaire de Bigup dans l’espace temporaire de CvtUpload — pour le coup, visiblement en perdant l’information du nom original du fichier).
Matthieu Marcillaud a écrit le 25/10/2018 à 18:09 :
Si CVT-Upload est présent, par contre, celui-ci prendra la main sur BigUp (ie: il déplacera le fichier temporaire de Bigup dans l’espace temporaire de CvtUpload — pour le coup, visiblement en perdant l’information du nom original du fichier).
Ben justement, j'ai testé bigup avec CVT-Upload installé et, contrairement à Upload-HTML5, le nom du fichier est correctement arrivé à la fonction titre_document.
Je ne suis pas du tout certain que ce nettoyage soit pertinent dans cvt-upload cela dit.
Le commentaire laisse penser que le $nom nettoyé a été utilisé comme nom de fichier, mais la le tmp_name est généré par tempnam(), donc il me semble bien que le $nom qui est injecté dans le name du $_FILES pourrait rester conforme à ce qui été envoyé par l’utilisateur
Les éventuels nettoyages devraient se faire ensuite ultérieurement, selon l’utilisation faite du nom du fichier.
Maieul qu’en penses-tu ?
Le nettoyage était là avant que je me penche sur CVT-Upload. Personnellement je ne suis pas certain de la pertinence de le membre dedans.
Donc ca me dérangerait pas de le faire sauter, mais il faudrait voir avec Rastapopoulos qui est sans doute à l'origine de ce nettoyage.
Je ne suis pas du tout certain que ce nettoyage soit pertinent dans cvt-upload cela dit.
Le commentaire laisse penser que le $nom nettoyé a été utilisé comme nom de fichier, mais la le tmp_name est généré par tempnam(), donc il me semble bien que le $nom qui est injecté dans le name du $_FILES pourrait rester conforme à ce qui été envoyé par l’utilisateur
Les éventuels nettoyages devraient se faire ensuite ultérieurement, selon l’utilisation faite du nom du fichier.
Maieul qu’en penses-tu ?
Le nettoyage était là avant que je me penche sur CVT-Upload. Personnellement je ne suis pas certain de la pertinence de le membre dedans.
Donc ca me dérangerait pas de le faire sauter, mais il faudrait voir avec Rastapopoulos qui est sans doute à l'origine de ce nettoyage.
Le nettoyage était là avant que je me penche sur CVT-Upload.
Personnellement je ne suis pas certain de la pertinence de le membre
dedans.
Donc ca me dérangerait pas de le faire sauter, mais il faudrait voir
avec Rastapopoulos qui est sans doute à l'origine de ce nettoyage.
Petit up pour réponse de Rastapopoulos.
Ne sais plus pourquoi, donc sûrement que ça peut sauter oui. Faut juste
faire gaffe que pas de doublon, de fichier de même nom, mais ça c'est
fait ailleurs je crois
Le nettoyage était là avant que je me penche sur CVT-Upload.
Personnellement je ne suis pas certain de la pertinence de le membre
dedans.
Donc ca me dérangerait pas de le faire sauter, mais il faudrait voir
avec Rastapopoulos qui est sans doute à l'origine de ce nettoyage.
Petit up pour réponse de Rastapopoulos.
Ne sais plus pourquoi, donc sûrement que ça peut sauter oui. Faut juste
faire gaffe que pas de doublon, de fichier de même nom, mais ça c'est
fait ailleurs je crois
- si c'est au niveau de cvtupload et du déplacement dans le rep temporaire, c'est tempnam() qui se charge de vérifier cela
(inc/cvtupload.php#L136)
- si c'est au niveau du traitement...et bien c'est au traitement de s'en occuper.
Donc je dirais gogogo