Когда в посте есть изображение с подчеркиванием в имени файла (например, ), каждое сохранение поста удваивает обратные слеши перед подчеркиванием в необработанном содержимом:
- После 1-го редактирования: ![20260421_140231|…]
- После 2-го редактирования: ![20260421\_140231|…]
- После N-го редактирования: ![20260421{2^N}_140231|…]
После 17 редактирований в поле raw накопилось 131 072 символа обратного слеша (2^17), что привело к увеличению размера с ~8 КБ до ~136 КБ. В результате пост становится невозможным редактировать — редактор показывает количество символов, значительно превышающее max_post_length, хотя видимое содержимое остаётся небольшим.
Шаги для воспроизведения:
- Загрузите изображение, имя файла которого содержит подчеркивание.
- Вставьте его в пост. Discourse сгенерирует альтернативный текст вида 20260421_140231.
- Несколько раз отредактируйте и сохраните пост (5–10 раз достаточно, чтобы заметить рост).
- Проверьте необработанное содержимое через /posts/{id}.json — количество обратных слешей удваивается при каждом сохранении.
Ожидаемое поведение: необработанное содержимое должно оставаться стабильным при редактировании. Подчеркивания в альтернативном тексте изображений не должны экранироваться заново при каждом сохранении.
Фактическое поведение: при каждом сохранении количество обратных слешей перед _ в альтернативном тексте изображения умножается на 2.
Обходное решение: выполните следующие команды в консоли Rails, чтобы удалить лишние обратные слеши и пересобрать пост:
p = Post.find(POST_ID)
p.update_column(:raw, p.raw.gsub(/\+(?=_)/, “”))
p.rebake!
Окружение:
- Версия Discourse: 2026.4.0-latest
- Установлен через официальный Docker-сценарий ./launcher