Problemi con il caricamento di file con nomi complessi in Safari

Sembra esserci un problema con i file caricati in Safari quando i nomi dei file includono virgolette (particolarmente problematico) o caratteri non ASCII. I nomi dei file in questione sono:

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

Il primo utilizza virgolette doppie standard e si comporta in modo molto problematico, mentre il secondo utilizza le virgolette tipografiche (curly quotes) che vengono danneggiate.

Vedi questo argomento del forum:

In Chrome/Mac, entrambi i file vengono scaricati normalmente come:

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 virgolette doppie nel primo file vengono sostituite con trattini bassi, ma ciò è accettabile, presumibilmente una scelta deliberata da qualche parte.

Tuttavia, in Safari, i file vengono scaricati come:

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

Il primo è particolarmente preoccupante, poiché il nome del file è stato completamente danneggiato, inclusa l’estensione. Potrebbero esserci implicazioni per la sicurezza, dato che non si sa come le virgolette vengano elaborate.

Il secondo sembra essere un problema di conversione UTF.

Sospetto che si tratti di una regressione, sia in Discourse (il mio server è alla versione 2.3.2) che in Safari, poiché penso che l’avremmo notato prima, ma non ho trovato casi specifici precedenti in cui le macro avessero chiaramente virgolette nei loro nomi da verificare. Esistono sicuramente file più vecchi con caratteri non ASCII (ad esempio qui), e non ho mai notato che non funzionassero in precedenza.

È particolarmente strano che funzioni in Chrome e non in Safari, quindi presumibilmente si tratta di un problema di codice lato client.

3 Mi Piace

Posso riprodurre il problema localmente con l’ultima versione, caricando e scaricando un file tramite Firefox. Anche Safari tronca il nome del download alle virgolette. Chrome deve gestire le virgolette nei nomi dei file in modo diverso, sostituendole con trattini bassi.

3 Mi Piace

@gerhard puoi dare un’occhiata?

2 Mi Piace

send_file di Rails attualmente non utilizza il parametro filename* nell’header Content-Disposition. Ecco perché quei nomi di file vengono alterati nella maggior parte dei browser.

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

Dovrei applicare una patch provvisoria per ora? Inoltre, sembra che lo storage S3 dovrebbe impostare anche il filename*.

2 Mi Piace

Probabilmente, non sono sicuro di quando arriveremo a Rails 6?

Sì, per favore. Sembra che questo codice abbia già un anno, quindi dovrebbe essere abbastanza sicuro (assicurati comunque di verificare se ci sono correzioni di bug).

3 Mi Piace

Ho appena applicato una correzione. Puoi provarla aggiornando o passando al branch tests-passed.

3 Mi Piace