Dupla escape de sublinhados no texto alternativo de imagens corrompe o raw do post a cada edição

Quando uma postagem contém uma imagem com um sublinhado no nome do arquivo (por exemplo, ), cada salvamento da postagem duplica as barras invertidas antes do sublinhado no conteúdo bruto:

  • Após a 1ª edição: ![20260421_140231|…]
  • Após a 2ª edição: ![20260421\_140231|…]
  • Após a Nª edição: ![20260421{2^N}_140231|…]

Após 17 edições, o campo bruto acumulou 131.072 caracteres de barra invertida (2^17), crescendo de ~8KB para ~136KB. Isso acaba fazendo com que a postagem se torne impossível de editar — o editor relata uma contagem de caracteres muito superior ao max_post_length, mesmo que o conteúdo visível seja pequeno.

Passos para reproduzir:

  1. Faça upload de uma imagem cujo nome de arquivo contenha um sublinhado.
  2. Insira-a em uma postagem. O Discourse gera texto alternativo como 20260421_140231.
  3. Edite e salve a postagem repetidamente (5 a 10 vezes são suficientes para notar o crescimento).
  4. Inspeccione o conteúdo bruto via /posts/{id}.json — a contagem de barras invertidas dobra a cada salvamento.

Comportamento esperado: O conteúdo bruto deve permanecer estável entre edições. Sublinhados no texto alternativo de imagens não devem ser reescapados a cada salvamento.

Comportamento real: Cada salvamento multiplica por 2 as barras invertidas antes de _ no texto alternativo de imagens.

Solução alternativa: Execute o seguinte no console do Rails para remover as barras invertidas extras e reprocessar:

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

Ambiente:

  • Versão do Discourse: 2026.4.0-latest
  • Instalado via configuração oficial do Docker ./launcher

Obrigado pelo relatório @Елиан_Гешев. Isso é muito provavelmente uma regressão em um commit recente.

Dando uma olhada :eyes: