当帖子包含文件名中带有下划线的图片时(例如),每次保存帖子都会使原始内容中下划线前的反斜杠数量翻倍:
- 第 1 次编辑后:![20260421_140231|…]
- 第 2 次编辑后:![20260421\_140231|…]
- 第 N 次编辑后:![20260421{2^N}_140231|…]
经过 17 次编辑后,原始字段累积了 131,072 个反斜杠字符(2^17),大小从约 8KB 增长到约 136KB。这最终导致帖子无法编辑——编辑器报告字符数远超 max_post_length,尽管可见内容很小。
复现步骤:
- 上传一个文件名中包含下划线的图片。
- 将其插入帖子。Discourse 会生成类似 20260421_140231 的替代文本。
- 重复编辑并保存帖子(5 到 10 次即可观察到增长)。
- 通过 /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 配置安装