피드로 돌아가기
Repairing a Broken PDF in Rust — Rebuilding the XREF Table From Scratch
Dev.toDev.to
Backend

XREF Table 재구축을 통한 PDF 복구율 80% 달성

Repairing a Broken PDF in Rust — Rebuilding the XREF Table From Scratch

hiyoyo2026년 4월 28일2intermediate

Context

PDF 파일 구조 내 Object ID와 Byte Offset을 매핑하는 XREF Table의 손상으로 인한 파일 오픈 불가 문제 발생. 데이터 자체는 보존되었으나 인덱스 파손으로 인해 접근 경로가 소실된 구조적 한계 직면.

Technical Solution

  • Raw Byte 스캔을 통한 "N 0 obj" 패턴 식별로 유실된 Object 위치 추적
  • data.windows() 기반의 슬라이딩 윈도우 기법을 적용한 효율적인 바이트 시퀀스 탐색
  • 객체 번호 역추적 로직을 통한 정밀한 Byte Offset 산출 및 매핑 데이터 생성
  • lopdf 라이브러리의 load_mem 실패 시 recover_document로 전환되는 Fallback 전략 수립
  • 식별된 오프셋 기반의 XREF Table 재구성으로 논리적 문서 구조 복원

Impact

  • 테스트 대상 "오픈 불가" PDF 중 약 80%의 복구 성공률 기록

Key Takeaway

인덱스 기반 데이터 구조에서 인덱스 파손 시 원본 데이터(Source of Truth)를 전수 조사하여 인덱스를 재생성하는 복구 전략의 유효성 확인.


- 인덱스 손상 가능성이 있는 파일 포맷 설계 시 원본 데이터 내 식별자 패턴 정의 여부 검토 - 라이브러리 기본 로드 실패 시 raw data를 직접 분석하는 Recovery Path 구현 고려 - 데이터 스트림 자체의 손상과 인덱스 손상을 구분하여 복구 가능 범위 정의

원문 읽기