Skip to content

fix: 링크 파서의 경계 입력과 이미지 대체 텍스트 처리 - #111

Merged
minjun0219 merged 2 commits into
mainfrom
codex/fix-parser-input-safety
Oct 5, 2026
Merged

minjun0219 merged 2 commits into
mainfrom
codex/fix-parser-input-safety

Conversation

@minjun0219

Copy link
Copy Markdown
Owner

닫히지 않은 대괄호를 반복하면 링크 탐색이 O(n²)으로 늘고, 링크 라벨 안의 링크를 깊게 중첩하면 호출 스택이 고갈됩니다. 또한 서식이 있는 이미지 대체 텍스트가 HTML 속성에 태그로 들어가 React에서 이미지 대신 태그 문자열이 보였습니다. Rust와 Go를 함께 수정하고 재현 입력을 코퍼스에 추가했습니다.

변경

  • 대괄호 짝과 주소 끝을 한 번의 역순 순회로 색인해 실패한 후보도 바로 판정합니다. 대괄호가 없는 산문 경로는 추가 할당 없이 유지합니다.
  • 링크·이미지 라벨 파싱은 32단계까지 허용하고, 더 깊은 라벨은 원문을 출력 문맥에 맞게 이스케이프해 보존합니다.
  • 불러오는 이미지의 대체 텍스트는 일반 텍스트로 렌더한 뒤 속성값으로 이스케이프합니다. 링크 폴백의 서식은 유지합니다.
  • HTML·Telegram 출력의 라벨 안 링크, 오토링크, 이미지 링크 폴백은 주소를 글자로 보존해 중첩 앵커를 만들지 않습니다. 명시적으로 불러오는 이미지는 링크 안에서도 유지합니다.

재현 및 결과

기준은 main의 87fd02b입니다. 동일 환경의 debug Rust CLI에서 대괄호 1만·2만·4만 자가 약 0.19·0.74·3.00초였고, 수정 후에는 약 0.002·0.003·0.005초였습니다. 1만 단계 중첩 링크는 기존 CLI에서 stack overflow로 중단됐으며 수정 후 정상 종료했습니다.

![**cat**](https://e.test/p.png)의 불러오기 출력은 alt="<strong>cat</strong>"에서 alt="cat"으로 바뀝니다. npm 스모크에서 WASM → 이벤트 → React 전체 경로와 스트리밍·미리보기를 확인합니다.

검증

  • README 동기화 및 Context7 스키마 검증 통과
  • cargo test --workspace --locked 통과: 코퍼스, 스트리밍 일치, 퍼즈, 산문 할당 회귀 포함
  • cargo clippy --workspace --all-targets --locked -- -D warnings 통과
  • CLI 및 wasm32-unknown-unknown 빌드 통과
  • Go 포맷·vet·Rust CLI 대조 테스트 통과; 기대값 재생성 후 기존 파일 변경 없음
  • npm 패키지 빌드 및 CI=1 ./scripts/smoke.sh 통과: Node, Bun, TypeScript, React, lezer
  • WASM에서 대괄호 10만 자와 중첩 라벨 1만 단계 처리 확인
  • React 스트리밍 예제 설치·프로덕션 빌드 통과

깊이 제한과 중첩 앵커 폴백은 SPEC에 명시했습니다. 코어 의존성 및 공개 API 변경은 없습니다.

minjun0219 and others added 2 commits October 5, 2026 22:35
라벨 깊이만 보고 안쪽 링크를 글자로 내려서, 바깥 링크가 차단된 스킴이거나
텔레그램 한도를 넘어 글자로 나갈 때 안쪽 링크까지 사라졌다. 바깥이 <a>를
낼지(makes_anchor)를 먼저 판정해 in_anchor 로 넘긴다.

- 라벨용 안쪽 인라인 상태가 in_cell 을 이어받는다. 표 칸 안 링크 라벨의
  <br> 이 줄바꿈이 되어 행이 갈리던 것을 막는다.
- 대괄호 색인 버퍼를 Inline 에 두고 재사용한다. 조각마다 새로 할당하지 않는다.
- 불러오는 이미지일 때만 Plain Vocab 을 만든다.
- Go 이식도 같게 고치고, 내장 close 를 가리던 지역 변수 이름을 바꾼다.
- 코퍼스: blocked-outer-link-label, cell-link-label-break

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@minjun0219
minjun0219 marked this pull request as ready for review October 5, 2026 23:29
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-05T23:34:51.446610Z 2bed757 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@minjun0219
minjun0219 merged commit 43919c3 into main Oct 5, 2026
10 of 11 checks passed
@minjun0219
minjun0219 deleted the codex/fix-parser-input-safety branch October 5, 2026 23:38
@github-actions github-actions Bot mentioned this pull request Oct 5, 2026
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