Problemas ao fazer upload de arquivos com nomes complexos no Safari

Parece haver um problema com arquivos carregados no Safari quando os nomes dos arquivos incluem aspas (particularmente problemático) ou caracteres não ASCII. Os nomes dos arquivos em questão são:

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

O primeiro usa aspas duplas regulares e se comporta de forma muito ruim; o segundo usa aspas curvas, que são corrompidas.

Veja este tópico no fórum:

No Chrome/Mac, ambos os arquivos são baixados 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

As aspas duplas no primeiro arquivo são substituídas por sublinhados, o que é aceitável, presumivelmente uma escolha deliberada em algum lugar.

No entanto, no Safari, os arquivos são baixados como:

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

O primeiro é particularmente preocupante, pois o nome do arquivo foi completamente corrompido, incluindo a extensão. Isso pode ter implicações de segurança, já que não se sabe como as aspas estão sendo processadas.

O segundo parece ser um problema de conversão UTF.

Suspeito que isso seja uma regressão, seja no Discourse (meu servidor está na versão 2.3.2) ou no Safari, pois acredito que teríamos visto isso antes, mas não consegui encontrar casos antigos específicos onde as macros tivessem claramente aspas em seus nomes para verificar. Definitivamente, há arquivos mais antigos com caracteres não ASCII (por exemplo aqui), e nunca notei que eles não funcionassem antes.

É particularmente estranho que funcione no Chrome e não no Safari, o que sugere que seja algum problema de código do lado do cliente.

3 curtidas

Consegui reproduzir isso localmente na versão mais recente, fazendo upload e download de um arquivo via Firefox. O Safari também corta o nome do download nas aspas. O Chrome deve lidar com aspas em nomes de arquivos de forma diferente, substituindo-as por sublinhados.

3 curtidas

@gerhard, você pode dar uma olhada?

2 curtidas

send_file do Rails atualmente não usa o parâmetro filename* no cabeçalho Content-Disposition. É por isso que esses nomes de arquivo ficam corrompidos na maioria dos navegadores.

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

Devo aplicar um monkey patch por enquanto? E parece que o armazenamento S3 também deveria definir o filename*.

2 curtidas

Provavelmente, não tenho certeza de quando chegaremos ao Rails 6?

Sim, por favor. Parece que esse código já tem 1 ano, então deve ser bastante seguro (mas certifique-se de verificar se há correções de bugs).

3 curtidas

Acabei de fazer um commit com uma correção. Você pode testá-la atualizando ou alternando para a branch tests-passed.

3 curtidas