Problemas al subir archivos con nombres complejos en Safari

Parece haber un problema con los archivos subidos en Safari cuando los nombres de archivo incluyen comillas (especialmente grave) o caracteres no ASCII. Los nombres de archivo en cuestión son:

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

El primero tiene comillas dobles normales y se comporta muy mal; el segundo tiene comillas tipográficas y estas se deforman.

Consulte este tema del foro:

En Chrome/Mac, ambos archivos se descargan normalmente como:

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

Las comillas dobles del primer archivo se reemplazan por guiones bajos, pero esto es aceptable; probablemente sea una decisión deliberada en algún lugar.

Sin embargo, en Safari, los archivos se descargan como:

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

El primero es particularmente preocupante, ya que el nombre del archivo está completamente deformado, incluida la extensión. Esto podría tener implicaciones de seguridad, pues nadie sabe cómo se están procesando las comillas.

El segundo parece ser un problema de conversión UTF.

Sospecho que se trata de una regresión, ya sea en Discourse (mi servidor está en la versión 2.3.2) o en Safari, ya que creo que lo habríamos detectado antes, pero no pude encontrar casos antiguos específicos donde las macros tuvieran claramente comillas en sus nombres para verificarlo. Definitivamente hay archivos antiguos con caracteres no ASCII (por ejemplo, aquí), y nunca había notado que no funcionaran antes.

Es particularmente extraño que funcione en Chrome y no en Safari, por lo que presumiblemente se trata de algún problema de código del lado del cliente.

3 Me gusta

Puedo reproducir esto localmente con la última versión, subiendo y descargando un archivo a través de Firefox. Safari también corta el nombre de la descarga en las comillas. Chrome debe manejar las comillas en los nombres de archivo de manera diferente, reemplazándolas con guiones bajos.

3 Me gusta

@gerhard ¿puedes echar un vistazo?

2 Me gusta

send_file de Rails actualmente no utiliza el parámetro filename* en el encabezado Content-Disposition. Por eso, esos nombres de archivo aparecen alterados en la mayoría de los navegadores.

Rails 6 lo solucionará: Encode Content-Disposition filenames on send_data and send_file · rails/rails@890485c · GitHub

¿Debería aplicar un parche temporal (monkey patch) por ahora? Y parece que el almacenamiento S3 también debería establecer filename*.

2 Me gusta

Probablemente, no estoy seguro de cuándo llegaremos a Rails 6.

Sí, por favor. Parece que este código ya tiene un año, así que debería ser bastante seguro (asegúrate de buscar correcciones de errores, sin embargo).

3 Me gusta

Acabo de enviar una corrección. Puedes probarla actualizando o cambiando a la rama tests-passed.

3 Me gusta