3. Broken Format


3.2. Trailer


PDF 파일의 끝에는 Trailer가 존재한다고 앞 장의 구조 설명에서 언급하였다.



위 그림에서의 샘플은 Header - Body - XrefTable - Trailer - XrefTable - Trailer 순으로 구성되어 있다. 선택한 영역인 Trailer 영역을 전부 삭제하더라도, 파일은 문제 없이 실행된다.

여기서 몇 가지 가설을 세우고 각각의 가설을 증명해 볼 수 있다.


가설 1. 두 번째 Cross-reference Table이 무시되고, 첫 번째 Trailer가 인식된다.


두 번째 Cross-reference Table 영역을 지우고 실행시켜 본 결과, 문제없이 실행됨을 확인하였다. 이것으로 두 번째 Cross-reference Table이 무시된다는 것은 어렴풋이 알 수 있겠지만, 첫 번째 Trailer가 인식된다는 것을 증명하지는 않는다.


가설 2. Trailer가 없어도 PDF Reader는 문서를 문제없이 읽어들인다.


첫 번째 Trailer부터 파일의 끝까지 지우고 실행해 본 결과, 실행 오류가 발생함을 확인하였다. 정말 PDF Reader가 Trailer를 정상적으로 인식 하는건가에 대한 의문을 다시 품고, 다른 가설을 세워보도록 한다.


가설 3. Trailer 내의 요소들이 반드시 전부 존재해야 한다.



샘플의 두 번째 XrefTable Trailer를 제거한 후 테스트를 진행해 본다. Trailer의 요소는 trailer 키워드, Dictionary, startxref 키워드, xref table의 위치값, EOF marker 5개가 존재한다. 각각의 요소들이 신뢰성이 있는가에 대해 알아보도록 한다.




startxref 키워드와, xref table의 위치값, EOF markertrailer에서 없더라도 정상적으로 문서가 열리는 것으로 확인되었다. 하지만 PDF Reader는 열린 문서를 닫을 때 다음과 같은 메시지를 출력한다.




Adobe Reader로부터 저장 된 PDF 파일은 Trailer가 없는 모습이고, 상당히 많은 구조가 변경되었다. 심지어 새로 저장 된 파일에는 trailer 키워드가 존재하지 않는다.




또 다른 특이사항으로는, Trailer가 없음에도 startxref 키워드가 존재한다는 것이다.





여기까지의 테스트로 다음과 같은 사실을 알 수 있다.


1. startxref Trailer에 종속적이지 않다.

2. Trailer가 없는 PDF 파일도 존재하고, 이러한 파일이 PDF Reader에 의해 읽혀질 수 있다.

3. startxref 키워드와, xref table의 위치값, EOF marker는 무시될 수 있다.

Posted by bong9
,