Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

해당 버젼에 있어야 할 것으로 추측되는 필드가 없는 경우 #147

Open
mete0r opened this issue Mar 10, 2014 · 2 comments

Comments

@mete0r
Copy link
Owner

mete0r commented Mar 10, 2014

해당 버젼에 있어야 할 것으로 추측되는 필드가 없는 경우가 존재하는 듯 함.

가령 Numbering의 unknown 필드는 대체로 >= 5.0.3.0 버젼부터 관측되는데, 그보다 높은 버젼의 파일임에도 없는 경우가 있음.

5.0.3.3/d6dfac424525298119de54410c3b22d74aa85511.hwp

ParseError: can't parse <class 'hwp5.dataio.UINT32'>
Caused by: Eof(144,)
Path: DocInfo
Treegroup: 1
Record: 45
Record Payload:
     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
  000000: 0c 00 00 00 00 00 32 00 ff ff ff ff 03 00 5e 00
  000010: 31 00 2e 00 0c 01 00 00 00 00 32 00 ff ff ff ff
  000020: 03 00 5e 00 32 00 2e 00 0c 00 00 00 00 00 32 00
  000030: ff ff ff ff 03 00 5e 00 33 00 29 00 0c 01 00 00
  000040: 00 00 32 00 ff ff ff ff 03 00 5e 00 34 00 29 00
  000050: 0c 00 00 00 00 00 32 00 ff ff ff ff 04 00 28 00
  000060: 5e 00 35 00 29 00 0c 01 00 00 00 00 32 00 ff ff
  000070: ff ff 04 00 28 00 5e 00 36 00 29 00 2c 00 00 00
  000080: 00 00 32 00 ff ff ff ff 02 00 5e 00 37 00 00 00
Problem Offset: at 144 (=0x90)
Binary Parse Events:
STARTEVENT: Numbering
STARTEVENT: ARRAY(NumberingLevel,7) 'levels'
STARTEVENT: NumberingLevel
STARTEVENT: Flags 'flags'
  0000: UINT32 12
ENDEVENT: Flags 'flags'
  0004: HWPUNIT16 'width_correction' 0
  0006: HWPUNIT16 'distance_to_body' 50
  0008: INT32 'charshape_id' -1
  000c: BSTR 'numbering_format' u'^1.'
ENDEVENT: NumberingLevel
STARTEVENT: NumberingLevel
STARTEVENT: Flags 'flags'
  0014: UINT32 268
ENDEVENT: Flags 'flags'
  0018: HWPUNIT16 'width_correction' 0
  001a: HWPUNIT16 'distance_to_body' 50
  001c: INT32 'charshape_id' -1
  0020: BSTR 'numbering_format' u'^2.'
ENDEVENT: NumberingLevel
STARTEVENT: NumberingLevel
STARTEVENT: Flags 'flags'
  0028: UINT32 12
ENDEVENT: Flags 'flags'
  002c: HWPUNIT16 'width_correction' 0
  002e: HWPUNIT16 'distance_to_body' 50
  0030: INT32 'charshape_id' -1
  0034: BSTR 'numbering_format' u'^3)'
ENDEVENT: NumberingLevel
STARTEVENT: NumberingLevel
STARTEVENT: Flags 'flags'
  003c: UINT32 268
ENDEVENT: Flags 'flags'
  0040: HWPUNIT16 'width_correction' 0
  0042: HWPUNIT16 'distance_to_body' 50
  0044: INT32 'charshape_id' -1
  0048: BSTR 'numbering_format' u'^4)'
ENDEVENT: NumberingLevel
STARTEVENT: NumberingLevel
STARTEVENT: Flags 'flags'
  0050: UINT32 12
ENDEVENT: Flags 'flags'
  0054: HWPUNIT16 'width_correction' 0
  0056: HWPUNIT16 'distance_to_body' 50
  0058: INT32 'charshape_id' -1
  005c: BSTR 'numbering_format' u'(^5)'
ENDEVENT: NumberingLevel
STARTEVENT: NumberingLevel
STARTEVENT: Flags 'flags'
  0066: UINT32 268
ENDEVENT: Flags 'flags'
  006a: HWPUNIT16 'width_correction' 0
  006c: HWPUNIT16 'distance_to_body' 50
  006e: INT32 'charshape_id' -1
  0072: BSTR 'numbering_format' u'(^6)'
ENDEVENT: NumberingLevel
STARTEVENT: NumberingLevel
STARTEVENT: Flags 'flags'
  007c: UINT32 44
ENDEVENT: Flags 'flags'
  0080: HWPUNIT16 'width_correction' 0
  0082: HWPUNIT16 'distance_to_body' 50
  0084: INT32 'charshape_id' -1
  0088: BSTR 'numbering_format' u'^7'
ENDEVENT: NumberingLevel
ENDEVENT: ARRAY(NumberingLevel,7) 'levels'
  008e: UINT16 'starting_number' 0
STARTEVENT: ARRAY(UINT32,7) 'unknown'
  0090: UINT32 -- Exception: Eof(144,)
Model Stack:

레코드 스트림 파싱 시 기대하지 않은 스트림의 끝을 만나면 해당 레코드를 불완전하게 남겨둔 채 다음 레코드로 넘어가서 진행하도록 해야함.

@mete0r
Copy link
Owner Author

mete0r commented Mar 10, 2014

혹은 해당 필드 이후는 없을 수 있음을 명시적으로 표시.

mete0r pushed a commit that referenced this issue Mar 10, 2014
@mete0r
Copy link
Owner Author

mete0r commented Jan 8, 2015

#149 로 미루어보아 돌아다니는 crafted 파일들에 이런 경우가 있는 듯 함. 무작정 스택 트레이스 뽑는 대신 경고를 주면 좋겠지.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant