Skip to content

fix: 라운드34 — 테스트가 닿지 않던 파일 감사, 결함 32건 수정 (보안 2건 포함) - #53

Merged
centwon merged 1 commit into
mainfrom
fix/round34-untested-files-audit
Sep 23, 2026
Merged

centwon merged 1 commit into
mainfrom
fix/round34-untested-files-audit

Conversation

@centwon

@centwon centwon commented Sep 23, 2026

Copy link
Copy Markdown
Owner

요약

테스트가 거의 닿지 않던 소스 파일 16개를 세 우선순위로 나눠 감사했습니다. 결함마다 실패하는 테스트로 먼저 재현한 뒤 고쳤고, 소스만 되돌리면 새 테스트가 다시 실패하는 것도 확인했습니다.

  • 선정 기준: 파일에 선언된 메서드 이름이 tests/에 나오지 않는 비율, 그리고 로드맵에 그 파일이 언급된 적이 있는지
  • 결함: 1순위 19건, 2순위 10건, 3순위 3건
  • 결정 사항 4건(아래)

보안

  • 붙여넣은 HTML 때문에 다른 컴퓨터로 접속이 일어났습니다. <img src="file://host/share/x.png">처럼 네트워크 공유(UNC)를 가리키는 그림을 열려고 했습니다. Windows에서는 이때 SMB 연결이 시작되어 사용자의 NTLM 인증 정보가 노출될 수 있습니다. 도달할 수 없는 테스트 주소로 21초 동안 연결을 시도하는 것을 실측했습니다. 이제 AllowLocalFileImages 설정과 관계없이 네트워크 공유는 읽지 않습니다.
  • javascript:, vbscript:, data: 링크를 읽을 때 버립니다. 글자는 남기고 링크만 없앱니다. 이전에는 이 링크가 문서에 남았다가 내보낸 HTML과 다른 앱용 클립보드로 그대로 나갔습니다.

주요 결함

  • 표를 지운 뒤 입력이 사라짐: 메뉴로 표를 지우거나 인라인 표를 블록으로 바꾸면 캐럿이 문서 밖 문단에 남아, 그 뒤에 친 글자가 보이지 않았습니다.
  • 인라인 그림 뒤 캐럿이 문단 끝을 넘음: 캐럿이 그림 바로 뒤에 있을 때 그림을 지우거나(메뉴, Backspace/Delete, Ctrl+X) 블록으로 바꾸면 생겼습니다.
  • 디코드 못 한 그림 뒤 블록이 겹쳐 그려짐: 뒤 블록이 그림 높이만큼 위로 올라가 그려졌습니다.
  • 인용 막대가 빠짐: 셀 안 문단과 빈 문단에는 인용 막대와 문단 배경이 그려지지 않았습니다.
  • 선택을 대체하지 않는 붙여넣기: 텍스트를 선택한 채 그림이나 엑셀 셀을 붙여넣으면 선택한 텍스트가 그대로 남았습니다.
  • 툴바가 호스트 설정을 덮어씀: 호스트가 코드로 용지를 바꾸면 툴바가 쪽 경계를 켜고 줌을 '맞춤'으로 바꿨습니다.
  • 읽기 전용 문서가 바뀜: InsertDivider, ReplaceAll, ReplaceNext가 읽기 전용 문서를 고쳤습니다.
  • 플래그를 무시한 끌기 복사: 표나 그림이 꺼진 편집기에서도 Ctrl+끌기로 복사됐습니다.
  • 래스터 PDF 색 뒤바뀜: RGBA 픽셀(macOS의 Skia)에서 빨강과 파랑이 바뀌었습니다.
  • 빈 되돌리기 단계: 아무것도 바꾸지 않는 명령이 되돌려도 변화가 없는 단계를 남겼습니다(8종).

결정 사항 (2026-09-23)

  • 여백 메뉴의 위쪽 여백에 "자동(한 줄)" 항목 추가
  • Tab: 어느 표든 마지막 셀에서 누르면 그 표에 행 추가
  • 블록 삽입 위치: 캐럿 자리(문단 중간이면 둘로 나눠 그 사이에)
  • 툴바 인용 버튼 추가(새 아이콘 슬롯 RichEditorIcon.Quote, PublicAPI.Unshipped.txt에 기록)
  • 편집 중 링크는 일반 클릭으로 여는 동작 유지(포트는 Ctrl+클릭, 알려진 분기로 기록)

검증

  • 빌드 경고 0개
  • 단위 테스트 1225건, 렌더 테스트 51건 통과(Windows 로컬)
  • 새 테스트는 *AuditTests(단위 12개 파일)와 RenderingAuditTests(렌더)
  • 실기 확인(사용자): 1순위 전체, 2순위의 인용 막대, 블록 삽입 위치, 툴바 인용 버튼
  • 로드맵의 틀린 기록 정정: 헤드리스 테스트에도 클립보드가 있습니다. 붙여넣기 경로를 끝까지 태우는 테스트를 이번에 추가했습니다.

🤖 Generated with Claude Code

선정 기준: 파일에 선언된 메서드 이름이 tests/에 나오지 않는 비율 + 로드맵 언급 여부.
결함마다 빨강 테스트를 먼저 만들고 수정했으며, 소스만 되돌리면 새 테스트가 빨강이 되는 것을 확인했다.

보안
- 붙여넣은 HTML의 네트워크 공유 그림(file://host/share)을 열어 SMB 연결 → NTLM 노출(21초 연결 실측).
  AllowLocalFileImages와 무관하게 UNC는 읽지 않는다.
- javascript:/vbscript:/data: 링크를 읽을 때 버린다(글자는 남김). 내보낸 HTML·클립보드로 새어 나가던 것.

1순위 (ContextMenu·Tables·Toolbar.PageFile·Formatting·Images·FindReplace)
- 우클릭이 표 테두리의 블록 캐럿을 풀지 않음
- 메뉴로 표 삭제/인라인 표→블록 후 캐럿이 문서 밖 문단에 남아 입력이 사라짐
- 인라인 그림 삭제/블록 변환 후 캐럿이 문단 끝을 넘음
- 호스트가 용지를 바꾸면 툴바가 쪽 경계를 켜고 줌을 '맞춤'으로 바꿈
- InsertDivider·ReplaceAll·ReplaceNext가 읽기 전용 문서를 고침
- 아무것도 바꾸지 않는 명령의 빈 되돌리기 단계(여백·정렬·줄 간격·내어쓰기·목록 해제·원본 크기·ReplaceAll)

2순위 (Rendering·Pagination·HitTesting·DragBlock·Clipboard)
- 디코드 못 한 그림 뒤 블록이 위로 겹쳐 그려짐
- 셀 안 문단·빈 문단에 인용 막대/문단 배경 없음
- 래스터 PDF 폴백이 RGBA 픽셀에서 빨강/파랑을 바꿈
- 인라인 표가 있는 열로 ↓ 진입 실패(IsCellOf가 인라인 표를 못 봄)
- AllowTables/AllowImages 꺼져도 Ctrl+끌기 복사
- 선택 위 그림/엑셀 셀 붙여넣기가 선택을 대체하지 않음
- 다른 앱용 HTML 복사에서 문단 위/아래 여백 누락

3순위 (Input·RTF·HTML)
- 선택한 인라인 그림 Backspace/Delete/Ctrl+X 후 캐럿이 문단 끝을 넘음

사용자 결정 (2026-09-23)
- 여백 메뉴 위쪽에 "자동(한 줄)"
- Tab = 그 표의 마지막 셀에서 행 추가
- 블록 삽입 = 캐럿 자리(문단 중간이면 분할)
- 툴바 인용 버튼(새 아이콘 슬롯 RichEditorIcon.Quote, Unshipped)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@centwon
centwon merged commit e217028 into main Sep 23, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant