Problèmes avec l'upload de fichiers aux noms complexes dans Safari

Il semble y avoir un problème avec les fichiers téléchargés dans Safari lorsque les noms de fichier contiennent des guillemets (particulièrement problématique) ou des caractères non ASCII. Les noms de fichier concernés sont :

Create New "Open File" Macro and Copy Macro URL 1.1.kmmacros
Create New "Open File" Macro and Copy Macro URL 1.1.kmmacros

Le premier utilise des guillemets doubles standards et se comporte très mal, tandis que le second utilise des guillemets typographiques qui sont corrompus.

Voir ce sujet du forum :

Dans Chrome/Mac, les deux fichiers se téléchargent normalement sous la forme :

Create New _Open File_ Macro and Copy Macro URL 1.1.kmmacros
Create New "Open File" Macro and Copy Macro URL 1.1.kmmacros

Les guillemets doubles du premier fichier sont remplacés par des tirets bas, ce qui est acceptable, probablement un choix délibéré quelque part.

Cependant, dans Safari, les fichiers se téléchargent sous la forme :

Create New .dms
Create New “Open File” Macro and Copy Macro URL 1.1.kmmacros

Le premier cas est particulièrement préoccupant, car le nom du fichier a été complètement corrompu, y compris l’extension. Cela pourrait avoir des implications en matière de sécurité, car on ne sait pas comment les guillemets sont traités.

Le second semble être un problème de conversion UTF.

Je soupçonne qu’il s’agit d’une régression, soit dans Discourse (mon serveur est en version 2.3.2), soit dans Safari, car je pense que nous aurions déjà rencontré ce problème auparavant. Cependant, je n’ai pas trouvé d’anciens cas spécifiques où les macros contenaient clairement des guillemets dans leurs noms pour vérifier. Il existe certainement d’anciens fichiers contenant des caractères non ASCII (par exemple ici), et je n’ai jamais remarqué qu’ils ne fonctionnaient pas auparavant.

Il est particulièrement étrange que cela fonctionne dans Chrome et pas dans Safari, ce qui suggère qu’il s’agit probablement d’un problème de code côté client.

3 « J'aime »

Je peux reproduire ce problème localement sur la dernière version en téléchargeant et en téléchargeant un fichier via Firefox. Safari tronque également le nom du téléchargement aux guillemets. Chrome doit gérer les guillemets dans les noms de fichiers différemment en les remplaçant par des underscores.

3 « J'aime »

@gerhard peux-tu jeter un coup d’œil ?

2 « J'aime »

send_file de Rails n’utilise actuellement pas le paramètre filename* dans l’en-tête Content-Disposition. C’est pourquoi ces noms de fichiers sont corrompus dans la plupart des navigateurs.

Rails 6 corrigera ce problème : Encode Content-Disposition filenames on send_data and send_file · rails/rails@890485c · GitHub

Devrais-je appliquer un correctif temporaire (monkey patch) pour l’instant ? Et il semble que le stockage S3 devrait également définir filename*.

2 « J'aime »

Probablement, mais je ne sais pas quand nous passerons à Rails 6 ?

Oui, s’il vous plaît. Il semble que ce code ait déjà un an, il devrait donc être assez sûr (assurez-vous tout de même de vérifier les correctifs de bugs).

3 « J'aime »

Je viens de soumettre une correction. Vous pouvez l’essayer en mettant à niveau ou en basculant vers la branche tests-passed.

3 « J'aime »