Doppia escapatura degli underscore nel testo alt delle immagini corrompe il post grezzo ad ogni modifica

Quando un post contiene un’immagine con un trattino basso nel nome del file (ad es. ), ogni salvataggio del post raddoppia le barre rovesciate prima del trattino basso nel contenuto grezzo:

  • Dopo la 1ª modifica: ![20260421_140231|…]
  • Dopo la 2ª modifica: ![20260421\_140231|…]
  • Dopo la Nª modifica: ![20260421{2^N}_140231|…]

Dopo 17 modifiche, il campo grezzo ha accumulato 131.072 caratteri di barra rovesciata (2^17), passando da ~8 KB a ~136 KB. Questo alla fine rende il post non modificabile: il compositore segnala un conteggio dei caratteri che supera di gran lunga max_post_length, anche se il contenuto visibile è piccolo.

Passaggi per riprodurre il problema:

  1. Carica un’immagine il cui nome file contiene un trattino basso.
  2. Inseriscila in un post. Discourse genera un testo alternativo come 20260421_140231.
  3. Modifica e salva il post ripetutamente (5-10 volte sono sufficienti per notare la crescita).
  4. Ispeziona il contenuto grezzo tramite /posts/{id}.json: il numero di barre rovesciate raddoppia ad ogni salvataggio.

Comportamento atteso: Il contenuto grezzo dovrebbe rimanere stabile tra le modifiche. I trattini bassi nel testo alternativo delle immagini non dovrebbero essere nuovamente escapati ad ogni salvataggio.

Comportamento effettivo: Ogni salvataggio raddoppia le barre rovesciate prima di _ nel testo alternativo delle immagini.

Soluzione temporanea: Esegui quanto segue nella console di Rails per rimuovere le barre rovesciate in eccesso e rigenerare il contenuto:

p = Post.find(POST_ID)
p.update_column(:raw, p.raw.gsub(/\+(?=_)/, “”))
p.rebake!

Ambiente:

  • Versione di Discourse: 2026.4.0-latest
  • Installato tramite configurazione Docker ufficiale ./launcher

Grazie per la segnalazione @Елиан_Гешев. Si tratta molto probabilmente di una regressione introdotta da un commit recente.

Sto dando un’occhiata :eyes: