Wenn ein Beitrag ein Bild mit einem Unterstrich im Dateinamen enthält (z. B. ), verdoppelt sich bei jedem Speichern des Beitrags die Anzahl der Backslashes vor dem Unterstrich im Rohinhalt:
- Nach 1. Bearbeitung: ![20260421_140231|…]
- Nach 2. Bearbeitung: ![20260421\_140231|…]
- Nach N. Bearbeitung: ![20260421{2^N}_140231|…]
Nach 17 Bearbeitungen hat das Rohfeld 131.072 Backslash-Zeichen (2^17) angesammelt und ist von ca. 8 KB auf ca. 136 KB angewachsen. Dies führt schließlich dazu, dass der Beitrag nicht mehr bearbeitet werden kann – der Editor meldet eine Zeichenzahl, die weit über max_post_length liegt, obwohl der sichtbare Inhalt klein ist.
Schritte zur Reproduktion:
- Laden Sie ein Bild hoch, dessen Dateiname einen Unterstrich enthält.
- Fügen Sie es in einen Beitrag ein. Discourse generiert Alternativtexte wie 20260421_140231.
- Bearbeiten und speichern Sie den Beitrag wiederholt (5–10 Mal reichen aus, um das Wachstum zu bemerken).
- Untersuchen Sie den Rohinhalt über /posts/{id}.json – die Anzahl der Backslashes verdoppelt sich bei jedem Speichern.
Erwartetes Verhalten: Der Rohinhalt sollte über mehrere Bearbeitungen hinweg stabil bleiben. Unterstriche in Alternativtexten von Bildern sollten bei jedem Speichern nicht erneut escapet werden.
Tatsächliches Verhalten: Bei jedem Speichern wird die Anzahl der Backslashes vor _ im Alternativtext von Bildern verdoppelt.
Workaround: Führen Sie Folgendes in der Rails-Konsole aus, um die überflüssigen Backslashes zu entfernen und den Beitrag neu zu rendern:
p = Post.find(POST_ID)
p.update_column(:raw, p.raw.gsub(/\+(?=_)/, “”))
p.rebake!
Umgebung:
- Discourse-Version: 2026.4.0-latest
- Installiert über das offizielle Docker-Setup mit ./launcher