Lorsqu’un message contient une image dont le nom de fichier comporte un underscore (par exemple), chaque sauvegarde du message double les barres obliques inversées avant l’underscore dans le contenu brut :
- Après la 1re édition : ![20260421_140231|…]
- Après la 2e édition : ![20260421\_140231|…]
- Après la N-ième édition : ![20260421{2^N}_140231|…]
Après 17 éditions, le champ brut a accumulé 131 072 caractères de barre oblique inversée (2^17), passant d’environ 8 Ko à environ 136 Ko. Cela finit par rendre le message impossible à éditer : le compositeur indique un nombre de caractères bien supérieur à max_post_length, même si le contenu visible est petit.
Étapes pour reproduire le problème :
- Téléchargez une image dont le nom de fichier contient un underscore.
- Insérez-la dans un message. Discourse génère un texte alternatif comme 20260421_140231.
- Éditez et sauvegardez le message à plusieurs reprises (5 à 10 fois suffisent pour constater la croissance).
- Examinez le contenu brut via /posts/{id}.json : le nombre de barres obliques inversées double à chaque sauvegarde.
Comportement attendu : Le contenu brut doit rester stable lors des éditions. Les underscores dans le texte alternatif des images ne doivent pas être rééchappés à chaque sauvegarde.
Comportement actuel : Chaque sauvegarde multiplie par 2 les barres obliques inversées avant _ dans le texte alternatif des images.
Contournement : Exécutez les commandes suivantes dans la console Rails pour supprimer les barres obliques inversées excédentaires et relancer le processus de cuisson :
p = Post.find(ID_DU_MESSAGE)
p.update_column(:raw, p.raw.gsub(/\+(?=_)/, “”))
p.rebake!
Environnement :
- Version de Discourse : 2026.4.0-latest
- Installé via la configuration Docker officielle ./launcher