图片替代文本中下划线的双重转义导致帖子原始内容在每次编辑时损坏

当帖子包含文件名中带有下划线的图片时(例如),每次保存帖子都会使原始内容中下划线前的反斜杠数量翻倍:

  • 第 1 次编辑后:![20260421_140231|…]
  • 第 2 次编辑后:![20260421\_140231|…]
  • 第 N 次编辑后:![20260421{2^N}_140231|…]

经过 17 次编辑后,原始字段累积了 131,072 个反斜杠字符(2^17),大小从约 8KB 增长到约 136KB。这最终导致帖子无法编辑——编辑器报告字符数远超 max_post_length,尽管可见内容很小。

复现步骤:

  1. 上传一个文件名中包含下划线的图片。
  2. 将其插入帖子。Discourse 会生成类似 20260421_140231 的替代文本。
  3. 重复编辑并保存帖子(5 到 10 次即可观察到增长)。
  4. 通过 /posts/{id}.json 检查原始内容——每次保存时反斜杠数量都会翻倍。

预期行为:原始内容在多次编辑中应保持稳定。图片替代文本中的下划线不应在每次保存时被重新转义。

实际行为:每次保存都会使图片替代文本中 _ 前的反斜杠数量翻倍。

临时解决方案:在 Rails 控制台中运行以下命令以移除多余的反斜杠并重新生成:

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

环境信息:

  • Discourse 版本:2026.4.0-latest
  • 安装方式:通过官方 ./launcher Docker 配置安装

感谢提交报告 @Елиан_Гешев。这很可能是 最近一次提交 导致的回归问题。

正在查看 :eyes: