게시물에 파일명에 밑줄이 포함된 이미지가 있는 경우(예: ), 게시물을 저장할 때마다 원본 콘텐츠에서 밑줄 앞의 역슬래시가 두 배로 증가합니다:
- 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을 통해 원본을 검사합니다 — 저장할 때마다 역슬래시 수가 두 배로 증가합니다.
기대되는 동작: 원본 콘텐츠는 편집 횟수에 관계없이 안정적으로 유지되어야 합니다. 이미지 대체 텍스트의 밑줄은 모든 저장 시점에 다시 이스케이프 처리되어서는 안 됩니다.
실제 동작: 저장할 때마다 이미지 대체 텍스트에서 _ 앞의 역슬래시가 2배로 증가합니다.
우회 방법: 다음 코드를 Rails 콘솔에서 실행하여 불필요한 역슬래시를 제거하고 다시 베이킹(rebake)합니다:
p = Post.find(POST_ID)
p.update_column(:raw, p.raw.gsub(/\+(?=_)/, “”))
p.rebake!
환경:
- Discourse 버전: 2026.4.0-latest
- 공식 ./launcher Docker 설치를 통해 설치됨