Skip to content

Parser breaks when there are Charts #54

@pxlmnstr

Description

@pxlmnstr

I am unable to parse a Keynote file that contains a ChartDrawableArchive. As soon as I delete the used pie chart from the slides, parsing works. Here is the stack trace:

Traceback (most recent call last):
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/codec.py", line 205, in from_buffer
output = klass(message_payload)
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/codec.py", line 155, in FromString
patched_field = proto_klass.DESCRIPTOR.fields_by_number[diff_path]
KeyError: 10000

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/codec.py", line 43, in from_buffer
chunk, data = IWACompressedChunk.from_buffer(data, filename)
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/codec.py", line 107, in from_buffer
archive, data = IWAArchiveSegment.from_buffer(data, filename)
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/codec.py", line 207, in from_buffer
raise ValueError(
ValueError: Failed to deserialize functools.partial(<bound method ProtobufPatch.FromString of <class 'keynote_parser.codec.ProtobufPatch'>>, type: 0
version: 65535
version: 65535
version: 4294967295
length: 2
base_message_index: 0
diff_merge_version: 2
diff_merge_version: 3
diff_merge_version: 4294967295
diff_field_path {
path: 10000
}
diff_read_version: 2
diff_read_version: 0
diff_read_version: 25
, <class 'TSCHArchives_pb2.ChartDrawableArchive'>) payload of length 2: 10000

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/file_utils.py", line 230, in process
process_file(filename, handle, sink, replacements, raw, on_replace)
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/file_utils.py", line 175, in process_file
file = IWAFile.from_buffer(contents, filename)
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/codec.py", line 49, in from_buffer
raise_from(ValueError("Failed to deserialize " + filename), e)
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/future/utils/init.py", line 403, in raise_from
exec(execstr, myglobals, mylocals)
File "", line 1, in
ValueError: Failed to deserialize Index/Slide-1047172.iwa

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File
cat_command(self.keynote_file, "Index/Document.iwa")
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/command_line.py", line 37, in cat_command
process(
File "/Users/x/.pyenv/versions/3.10.1/lib/python3.10/site-packages/keynote_parser/file_utils.py", line 232, in process
raise ValueError("Failed to process file %s due to: %s" % (filename, e))
ValueError: Failed to process file Index/Slide-1047172.iwa due to: Failed to deserialize Index/Slide-1047172.iwa
Exception ignored in: <k2pp.ListStream object at 0x151f42650>
AttributeError: 'ListStream' object has no attribute 'flush'

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