Skip to content

HWPX 저장 시 폼 컨트롤 속성값(caption) XML 특수문자 이중 이스케이프 누적 #1534

Description

@planet6897

요약

HWPX 직렬화(저장) 시 폼 컨트롤 속성값(예: <hp:checkBtn caption="...">)의 XML 특수문자(&, <, >)가 이중 이스케이프되어, 저장할 때마다 손상이 한 겹씩 누적된다. 일반 <hp:t> 본문 텍스트는 정상이며, 폼 필드 속성에만 발생한다.

재현

대상 샘플: samples/hwpx/form-002.hwpx (체크박스 caption에 & 포함)

cargo build --release
./target/release/rhwp hwpx-roundtrip samples/hwpx/form-002.hwpx -o output/poc/bug
# 저장본(form-002.rt.hwpx)을 다시 roundtrip → 누적 확인
./target/release/rhwp hwpx-roundtrip output/poc/bug/form-002.rt.hwpx -o output/poc/bug2

증상 (저장할수록 누적)

section0.xml<hp:checkBtn caption="..."> 속성값:

단계 XML caption 원문 디코딩된 실제값
원본 IP R&amp;&amp;D연계 IP R&&D연계
1회 저장 IP R&amp;amp;&amp;amp;D연계 IP R&amp;&amp;D연계 (손상)
2회 저장 IP R&amp;amp;amp;&amp;amp;amp;D연계 한 겹 더 증가

매 저장마다 &&amp; 가 추가되어 무한 누적된다. 한컴에서 열면 폼 필드 캡션이 R&amp;&amp;D처럼 깨져 보인다.

범위 / 원인 추정

  • 일반 본문(<hp:t> 텍스트 노드)은 정상: aift.hwpx, [2027] 온새미로 1 본교재.hwpx& 포함 본문은 무손상 roundtrip 확인.
  • 폼 컨트롤 속성 직렬화 경로에서만 발생 — 값이 이미 이스케이프된 상태로 들어오는데 attribute writer가 다시 이스케이프하는 것으로 추정 (captionname, command 등 다른 속성도 점검 필요).
  • 트리거: 폼 필드 속성값에 &/</>/따옴표 포함 시.

회귀 게이트 사각지대

hwpx-roundtrip --batchcargo test --test hwpx_roundtrip_baseline 의 ir-diff가 이 결함을 잡지 못함(IR_DIFF 0으로 통과). 폼 컨트롤 속성값이 IR 비교 대상에 포함되지 않는 사각지대가 있으므로, 수정과 함께 회귀 가드 보강 필요.

검증 환경

  • samples/hwpx/ 전수 53개 테스트: baseline 4/4 통과, 구조 roundtrip 56/57 PASS(1건은 .hwpx 확장자의 HWP5 파일로 제외), 저장본 렌더(SVG) 52/52 정상.
  • 본 결함은 텍스트 일치 검사에서 form-002 1건으로 표면화됨.

참고 (별건, 본 이슈 범위 외)

k-water-rfp.hwpx 저장본에서 페이지 경계 부근 빈 줄 5개 증가(문단 수·본문 보존, 페이지네이션 미세 차이). 데이터 손상 아님 — 필요 시 별도 이슈로 분리.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinghwpxHWPX 포맷 처리: 파싱, 직렬화, roundtrip, XML/ZIP 패키지 보존, 호환성 개선serialization문서 저장/직렬화: HWPX/HWP 출력, XML/OLE 속성 보존, roundtrip 저장 정합성

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions