From b39e798e0d3f5385b590e91ac847b1fa215e65e9 Mon Sep 17 00:00:00 2001 From: centwon Date: Thu, 1 Oct 2026 06:44:59 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=EB=A1=9C=EB=93=9C=EB=A7=B5=20?= =?UTF-8?q?=E2=80=94=20=EB=9D=BC=EC=9A=B4=EB=93=9C35=20=EB=A8=B8=EC=A7=80(?= =?UTF-8?q?#59),=20=EC=83=81=ED=95=9C=EA=B0=92=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=ED=99=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- Project_Roadmap.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project_Roadmap.md b/Project_Roadmap.md index 8108aed..8cdfa76 100644 --- a/Project_Roadmap.md +++ b/Project_Roadmap.md @@ -46,7 +46,7 @@ PR #48·#49·#50), 실기 후속도 PR #52로 들어왔다. 남은 것은 게시 게시 절차: `` → Unshipped를 Shipped로 이관 → CHANGELOG `[Unreleased]` → 버전 → README 배지(en/ko) → PR로 3-OS CI → `v1.3.0` 태그 push(**사람이 실행**, Trusted Publishing) → **nuget.org 패키지 페이지 육안 확인**. -**1a. 라운드35 · 전수 감사 (2026-10-01, PR 대기)** — `src` 약 19,500줄을 모델 → 포매터 → 컨트롤 순으로 읽었다. 결함 **16건** +**1a. 라운드35 · 전수 감사 (2026-10-01, PR #59 머지)** — `src` 약 19,500줄을 모델 → 포매터 → 컨트롤 순으로 읽었다. 결함 **16건** (프로세스 종료 3·데이터 소실 3·보안 1), 전부 빨강 먼저 → 수정 → 개별 반증. 대부분 이전 라운드가 재지 않은 **입력의 크기·깊이** 축이다. 테스트: `Round35AuditTests`. - 치명(프로세스 종료, catch 불가): HTML `
` 2,000겹(11 KB) 붙여넣기, 중첩 표 400단(RTF `\itap` 무제한) 렌더 — 스택 오버플로. 수정: DOM 128단 아래는 글자로 접기(비재귀) + HtmlAgilityPack id 색인 끔(그 제거가 재귀) · RTF 중첩 32단. @@ -54,7 +54,7 @@ PR #48·#49·#50), 실기 후속도 PR #52로 들어왔다. 남은 것은 게시 인라인 표 섞인 한 문단 붙여넣기가 표를 버림. - 보안: 파일의 그림 MIME이 내보낸 HTML ``에 그대로 → 속성 주입. - 메모리·시간: 픽셀 폭탄(1.5 MB → 1.6 GB) · 표 증폭(행 × 가장 넓은 행) · `.flow` 미참조 항목 전부 풀기 · RTF `IndexOf` O(n²). -- **사용자 확인 필요**: 그림 디코드 상한 **1억 픽셀**(넘으면 붙여넣기 거절, 문서 안 것은 바이트 보존·미표시) — 200 MP 폰 사진은 걸린다. +- **사용자 결정(10-01, 그대로 확정)**: 그림 디코드 상한 **1억 픽셀**(넘으면 붙여넣기 거절, 문서 안 것은 바이트 보존·미표시) — 200 MP 폰 사진은 걸린다. 가져오는 표 상한 1,000열 / 25만 셀, HTML DOM 128단, RTF 표 중첩 32단, `.flow` 그림 항목 256 MB. - 기각(실측): `file:///%5C%5Chost` UNC 우회(경로가 `\\\host`가 되어 SMB 안 탐) · 링크 셸 실행(`http(s)`만 연다) · 셀 문단 여백의 서명 누락(셀 측정이 안 씀). - 남긴 것(미수정, 저): JPEG 헤더 스캔이 채움 바이트에 약함 · 앵커 셀이 중첩 표로 시작하면 병합한 글자가 그 안으로 · RTF 글꼴명의 `;`가 글꼴 표를 깸 · From 7d509b9eb154380422caf10cbee859730d980109 Mon Sep 17 00:00:00 2001 From: centwon Date: Thu, 1 Oct 2026 06:58:43 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=EB=9D=BC=EC=9A=B4=EB=93=9C35=20?= =?UTF-8?q?=ED=9B=84=EC=86=8D=20=E2=80=94=20=EB=82=A8=EA=B2=A8=20=EB=91=94?= =?UTF-8?q?=204=EA=B1=B4=20=ED=99=95=EC=A0=95=C2=B7=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - JPEG 채움 바이트(FF FF)·길이 없는 마커를 세그먼트 길이로 읽어 프레임 헤더를 건너뜀 -> 크기 (0,0) -> 1억 픽셀 상한 우회. 채움 바이트와 길이 없는 마커를 건너뜀 - RTF 세로 병합 2만 개(1.4 MB)에 29.6 s 멈춤: MergeCells가 매번 격자 전체 스캔. 1x1 칸만인 범위는 기존 병합에 걸칠 수 없으므로 스캔 생략 -> 0.38 s (500x500 상한 끝 2.7 s) - 앵커 셀이 중첩 표로 시작하면 병합한 글자가 그 표 안으로(TableCell.Para가 내려감) - RTF 글꼴명의 ';'가 글꼴 표 항목을 끊음 -> 이름에서 뺌 - 기각: 구분선 Indent의 JSON 누락(메뉴로 못 바꾸고 렌더링도 안 씀) 반증: 수정마다 되돌려 빨강, 빠른 경로의 전제(병합 옆 1x1 범위·병합에 닿는 범위의 확장)도 반증. unit 1293 + render 55, 퍼즈 500시드 그린. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 10 +++ Project_Roadmap.md | 8 +- src/AvaloniaRichEditor/Documents/ImageInfo.cs | 5 ++ .../Documents/TableBlock.cs | 24 ++++- .../Formatters/RtfDocumentFormatter.cs | 4 +- .../Round35AuditTests.cs | 90 +++++++++++++++++++ 6 files changed, 135 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e7b13a..900846c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,16 @@ go red (the depth ones take the test host down, which is the point). million `
    `s. It is read as 0–8, as RTF already did, and written clamped. - `