•  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

리그베다 위키 오류 제목 속출 사건

최근 수정 시각 : 2024-03-25 00:25:50 | 조회수 : 4

리그베다 위키에서 2014년 2월 26일 23만 고지를 눈앞에 둔 상황에서 일어난 사건. 해당 현상은 이전에도 간간히 발생하고 있던 것으로, 버그의 내용은 베다 위키에 있는 서로 다른 두 문서의 제목이 %a로 이어진 문서가 빈 내용으로 생긴 것.(1) 22만 9900개를 넘기고 23만 고지를 앞두고 있던 2014년 2월 26일 밤 %a가 붙은 버그성 항목에 대한 개별 삭제 처리가 시작되었는데, 27일 아침 기준으로 그런 버그성 항목이 최소 4천개는 넘는 것으로 드러났다.

목차

1. 사건 경과
2. 원인
3. 기타
4. 패치

1. 사건 경과

2014년 2월 27일에는 추가로 �(U+FFFD, replacement character)가 제목에 들어가는 버그성 항목이 발견되었다.

손수 지우면 해결될 것으로 여겨 2월 26일 밤부터 27일 오후 6시 즈음까지 최근 변경 내역에 삭제된 오류 항목들이 가득 채우고 있었으나, 지워져도 자동으로 다시 생성되고 있는 경우가 발견되어 위키 메커니즘 자체에 문제가 있는 것으로 판명, 개별삭제는 중단되었다. 중단 시점에서 거의 23만 달성 직전이었던 문서 갯수가 229260 정도까지 감소했으며, 이후 위키니트들의 항목 생성이 계속되어 문서 수가 다시 늘어나고 있다.

2014년 4월 4일에 원인에 대한 패치가 적용 되었으나 완전히 해결되진 않았다. 2014년 9월부터 2015년 1월까지 관측한 결과 일반적인 위키 운영을 한다면, %0A 항목이 새로 생기는 일은 없었다.(4786개로 고정) 2015년 1월 12일 기준으로, 여전히 4748개의 오류 항목이 뜨는 것으로 나오며, 이를 수동삭제하는 경우에는 예전과 마찬가지로 %0A 항목이 생기게 되었다.

2. 원인

enter의 퍼센트 회피표현(2) 이 %0A인 것과 연관이 있는 것으로 추정되었으며, 2014년 2월 28일 모니위키의 개발자 wkpark가 이 사태의 원인을 이렇게 설명했다.

PageIndexer의 버그입니다.
1. 페이지 이름에 "n" 문자 (%0a)가 들어가는 경우 PageIndexer가 오류를 일으킵니다.
2. 또한 페이지이름에 "n" 문자가 들어있는 경우는 페이지 검색에 오류가 발생합니다.
3. 페이지 검색에 오류가 발생하면서 이상한 페이지 이름(잘린 페이지 이름)을 검색 결과로 종종 알려줍니다.
4. 이 잘못된 문서를 있어야할 문서로 착각하고 종종 페이지를 생성하는 것으로 생각됩니다.
5. 존재하지 않는 문서를 지우려고 하면 로그에 기록이 남는 버그가 있습니다. 실제로 문서는 존재하지도 않고, 지워지지도 않았으나 로그에 남아서 마치 지워진 것처럼 보이는 현상입니다.

일단 임시방편으로 data/cache/pageindex/ 디렉토리를 지워주면 페이지 인덱서는 재생성되고 일부 오류는 바로잡힐 것입니다.

3. 기타

  • 1. 이런 버그이기 때문에 실제로 수천페이지가 "%0a" 문자가 포함되어있다고 잘못 검색 결과를 보여주지만 실제로는 그렇지 않다.
  • 2. PageIndexer는 문서 개수를 엉터리로 보고하고 있는 것일 수 있다.

4. 패치

  • https://github.com/wkpark/moniwiki/commit/ee6a671007a56dd2af0bb90481201e4c8f39ae97
  • https://github.com/wkpark/moniwiki/commit/33a12f530ede1936e1e98b294f26a8d400e52fb4
  • https://github.com/wkpark/moniwiki/commit/2ad491d77e1022133a28416b6ef58ceed2cd8bb5
  • 위 패치의 잘못을 고침

  • 1. 패치를 적용한다.
  • 2. `data/cache/pageindex/` 디렉토리를 통채로 지운다. (=> RecentChanges 문서를 브라우저에서 보면 재 갱신됨)
  • 3. "%0a" 문자가 "%1a" 문자로 대신 보이게 된다. (주소창에) n 문자 대신에 ^Z 문자로 대치시키는 것. 실제로 ^Z는 안보임.

(1) 예를 들면 "DO IT ALL NIGHT%a김형권군" 이런식
(2) 코드에서 기능을 가진 부호 혹은 문자를 대신 표현해 이것은 기능을 뜻하는 게 아닌 단순한 문자열이라고 표시하는 대체표현