Skip to content

[도구] HWP5 roundtrip 무손실 게이트(hwp5-roundtrip CLI) 신설 — BinData 보존·페이지수 복원 검사 #1552

Description

@planet6897

배경

HWPX/HWP5 동일포맷 roundtrip(불러오기→저장하기→재불러오기) 무손실 4단계 검증(IR·텍스트·한글 재열림·한글 PDF) 결과, IR 뼈대 diff=0이 무손실을 보장하지 않음이 실증됨. (보고서: output/poc/fidelity/report.md)

발견된 손실:

  • F1(심각): serialize_document(HWP5)가 일부 BinData 그림 스트림을 통째 드롭. 표본 25건 중 4건/19스트림(KTX 3/3, Worldcup 13/47, interview 383KB jpg). IR diff=0·텍스트 동일이라 자동검사 전건 false PASS. 유지 이미지의 크기변동은 무손실 재압축으로 확인.
  • F2(심각): KTX(437문단·다중 표) 저장본이 한글에서 27쪽→1쪽 붕괴. rhwp는 2-round r2=0으로 자가검출 불가(자기일관). 외부 한글 오라클만 검출.
  • F3(경미): HWPX 컨트롤 슬롯 8유닛 시프트 — samples엔 없고 hwpdocs 실문서 9/25에만 노출.

문제: HWP5 roundtrip 게이트 부재

  • hwpx-roundtrip에 대응하는 HWP5 게이트가 없음(convert+ir-diff 수동 체인).
  • IR diff·hwpx-roundtrip 모두 BinData 스트림을 비교하지 않음 → F1 미감지.
  • serialize_hwp_with_verify(페이지수 복원 검증)는 코드에 있으나 CLI/배치 미노출 → F2 미감지.

제안: hwp5-roundtrip CLI 신설

hwpx-roundtrip 미러 + HWP5 고유 검사 추가:

  1. parse → export_hwp_native → 재parse + IR diff(기존 diff_documents)
  2. BinData 스트림 보존 검사(count + decompressed 내용 멀티셋) — F1 게이트화
  3. 페이지수 복원 검사(serialize_hwp_with_verify 활용) — F2 게이트화
  4. CFB/OLE 구조 검사(필수 스트림: FileHeader/DocInfo/BodyText/Section*)
  5. 2-round 안정성 + 배치 모드 + inventory.tsv + 종료 코드(CI)

부수: 본 게이트가 잡아낼 실제 결함(F1·F2)·HWPX F3는 별도 후속 이슈로 분리.

산출물(본 조사)

  • 보고서/harness: output/poc/fidelity/ (fidelity_t1t2.py/t3_reopen.py/t4_visual.py, pyhwpx+olefile+pymupdf)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions