Skip to content

dartograph 0.4.1

Choose a tag to compare

@ictechgy ictechgy released this 09 Sep 04:56
53a4e0f

0.4.1

전체 감사(성능·보안·구조) 후속 수정 릴리스입니다. 새 명령·옵션은 없고(0.4.0 참조) 결함 수정·출력 충실성·문서 영어 전환이 내용입니다. pub.dev의 Readme·Changelog 탭이 이번 릴리스부터 영어로 제공됩니다(한국어본은 저장소의 README.ko.md·CHANGELOG.ko.md).

보안·주입 (실측 재현 후 수정)

  • 개행 파일명이 Mermaid 라벨을 두 문장으로 절단(구문 주입)하고 text 진단줄을 위조하고 ESC·bidi가 GitHub Actions 로그로 통과하던 문제를 출력 표면 전체의 제어문자 정책으로 통일했습니다. Mermaid CR·LF는 엔티티 코드(#13;·#10;), text는 가시 이스케이프, GH는 C0·DEL·C1·U+2028/9·bidi까지 퍼센트 인코딩, DOT는 CR 대칭 이스케이프.
  • SARIF artifact uri의 조용한 손상·오귀속을 수정했습니다(back\slash.dartback/slash.dart, %41.dartA.dart였던 것이 세그먼트별 인코딩으로 무손실).
  • analyzer/yaml 내부에서 새는 Error 계열이 스택트레이스(경로 반향)와 미문서화 종료 코드 255로 끝나던 것을 CLI 경계에서 계약된 실패(2)로 수습합니다. bridges의 제어문자 거부와 git 비-UTF8 출력도 원인에 맞는 진단으로 귀인됩니다.
  • 분석 캐시 키가 표준 5 디렉터리 밖의 루트 안 .dart(예: tool/) 변경을 놓쳐 낡은 해석을 재사용하던 stale hit을 차단했습니다(루트 전체 열거, .fvm 등 숨김 디렉터리는 가지치기). SECURITY.md에 심볼릭 링크 유입 채널을 문서화했습니다.

정확성

  • --since·affected의 Git 변경 매칭이 심볼릭 링크 소스에 대해 양방향이 됐습니다(링크 파일 변경과 링크 대상 변경 모두).
  • entry_points를 선언한 dartograph.yamlentry-points: main retention roots narrowed to N ... 한계를 보고합니다 — 설정이 보존을 좁혔다는 사실이 출력에 남습니다.
  • dead --format jsonreport 분류 필드(dead/test-only), github-actions에 baseline 억제 notice(억제 > 0일 때만), graph --format json 노드에 조건부 isEnumConstant: true가 추가됐습니다.
  • SARIF 파일 finding이 1:1 region을 발명하지 않습니다(region은 선택 요소).
  • generated-code-staleness 한계가 mtime 관측임(=선언된 결정성 예외)을 문서화했습니다.

0.4.0 대비 출력 바이트가 바뀌는 지점 (정상 입력 기준)

  • dead --format json: report 필드 추가(항상).
  • graph --format json: enum 상수 노드에만 isEnumConstant: true 추가.
  • github-actions: baseline 억제 > 0일 때만 notice 줄 추가.
  • entry_points 설정 저장소만: 새 limitation 문자열 추가.
  • SARIF: 파일 finding의 region 제거(오정보였으므로 보존 대상 아님).
  • 병적 입력(개행·제어문자·역슬래시 파일명)에서만: Mermaid/text/GH/SARIF 위escape. 그 외 정상 경로는 전 표면 byte-for-byte 불변(기존 골든 테스트 무수정 통과가 증거).

검증

244 테스트, 라인 커버리지 95.9%, 오탐 코퍼스 양방향, CLI 계약 55케이스, 두 SDK(3.11.0/3.13.3) CI. 캐시 identity에 toolVersion이 포함되어 0.4.0 캐시는 자동으로 한 번 재분석됩니다.

분석 한계는 파일 단위 관측이며 완전성이나 삭제 안전성을 보증하지 않습니다.