Doppeltes Entkommen von Unterstrichen im Alt-Text von Bildern beschädigt den Roh-Beitrag bei jeder Bearbeitung

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:

  1. Laden Sie ein Bild hoch, dessen Dateiname einen Unterstrich enthält.
  2. Fügen Sie es in einen Beitrag ein. Discourse generiert Alternativtexte wie 20260421_140231.
  3. Bearbeiten und speichern Sie den Beitrag wiederholt (5–10 Mal reichen aus, um das Wachstum zu bemerken).
  4. 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

Danke für den Bericht @Елиан_Гешев. Dies ist höchstwahrscheinlich eine Regression auf einem neuesten Commit.

Ich schaue mir das an :eyes: