psobot / keynote-parser

A packer/unpacker for Apple Keynote presentation files.
156 stars 17 forks source link

ValueError: chr() arg not in range(0x110000) #19

Closed kortenkamp closed 4 years ago

kortenkamp commented 4 years ago

When trying to reassemble my slides, I run into the following error:

$ keynote-parser pack ZahlenUndOperationen-WS1920
Reading from ZahlenUndOperationen-WS1920...
Reading Index/AnnotationAuthorStorage.iwa.yaml...:  60%|█████████████████████████████████████████████████████████████████████████▏                                               | 2716/4494 [00:00<00:00, 2397.61it/s]/usr/local/lib/python3.7/site-packages/keynote_parser-1.10.0.2-py3.7.egg/keynote_parser/file_utils.py:154: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
Reading Index/Slide-10965348.iwa.yaml...:  73%|████████████████████████████████████████████████████████████████████████████████████████████████▍                                   | 3283/4494 [02:36<00:57, 20.92it/s]
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/keynote_parser-1.10.0.2-py3.7.egg/keynote_parser/file_utils.py", line 212, in process
  File "/usr/local/lib/python3.7/site-packages/keynote_parser-1.10.0.2-py3.7.egg/keynote_parser/file_utils.py", line 154, in process_file
  File "/usr/local/lib/python3.7/site-packages/yaml/__init__.py", line 114, in load
    return loader.get_single_data()
  File "/usr/local/lib/python3.7/site-packages/yaml/constructor.py", line 49, in get_single_data
    node = self.get_single_node()
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 36, in get_single_node
    document = self.compose_document()
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 55, in compose_document
    node = self.compose_node(None, None)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 82, in compose_node
    node = self.compose_sequence_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 111, in compose_sequence_node
    node.value.append(self.compose_node(node, index))
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 82, in compose_node
    node = self.compose_sequence_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 111, in compose_sequence_node
    node.value.append(self.compose_node(node, index))
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 82, in compose_node
    node = self.compose_sequence_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 111, in compose_sequence_node
    node.value.append(self.compose_node(node, index))
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 82, in compose_node
    node = self.compose_sequence_node(anchor)
  File "/usr/local/lib/python3.7/site-packages/yaml/composer.py", line 110, in compose_sequence_node
    while not self.check_event(SequenceEndEvent):
  File "/usr/local/lib/python3.7/site-packages/yaml/parser.py", line 98, in check_event
    self.current_event = self.state()
  File "/usr/local/lib/python3.7/site-packages/yaml/parser.py", line 406, in parse_indentless_sequence_entry
    KeyToken, ValueToken, BlockEndToken):
  File "/usr/local/lib/python3.7/site-packages/yaml/scanner.py", line 116, in check_token
    self.fetch_more_tokens()
  File "/usr/local/lib/python3.7/site-packages/yaml/scanner.py", line 251, in fetch_more_tokens
    return self.fetch_double()
  File "/usr/local/lib/python3.7/site-packages/yaml/scanner.py", line 655, in fetch_double
    self.fetch_flow_scalar(style='"')
  File "/usr/local/lib/python3.7/site-packages/yaml/scanner.py", line 666, in fetch_flow_scalar
    self.tokens.append(self.scan_flow_scalar(style))
  File "/usr/local/lib/python3.7/site-packages/yaml/scanner.py", line 1152, in scan_flow_scalar
    chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark))
  File "/usr/local/lib/python3.7/site-packages/yaml/scanner.py", line 1217, in scan_flow_scalar_non_spaces
    chunks.append(chr(code))
ValueError: chr() arg not in range(0x110000)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/keynote-parser", line 11, in <module>
    load_entry_point('keynote-parser==1.10.0.2', 'console_scripts', 'keynote-parser')()
  File "/usr/local/lib/python3.7/site-packages/keynote_parser-1.10.0.2-py3.7.egg/keynote_parser/command_line.py", line 121, in main
  File "/usr/local/lib/python3.7/site-packages/keynote_parser-1.10.0.2-py3.7.egg/keynote_parser/command_line.py", line 29, in pack_command
  File "/usr/local/lib/python3.7/site-packages/keynote_parser-1.10.0.2-py3.7.egg/keynote_parser/file_utils.py", line 214, in process
ValueError: Failed to process file Index/Slide-10965348.iwa.yaml due to: chr() arg not in range(0x110000)

I attach the slide's yaml file, and a screenshot.

Slide-10965348.iwa.yaml.txt

Bildschirmfoto 2020-06-16 um 18 09 26

What seems to be strange is the section

      text:
      - "Restklassen haben wir bereits kennengelernt. F\xFCr ein beliebiges \uFFFC\
        \ sind alle Zahlen, die sich um ein Vielfaches von m unterscheiden, \u201E\
        \xE4quivalent modulo \uFFFC\u201C.\nAnders gesagt: Die \xC4quivalenzklassen\
        \ werden dadurch gebildet, dass in einer (Rest)klasse alle Zahlen liegen,\
        \ die sich um ein Vielfaches von m unterscheiden.\nIn Zeichen: \uFFFC bezeichnet\
        \ alle Zahlen, die als Summe von \uFFFC und einem ganzzahligen Vielfachen\
        \ von \uFFFC entstehen \nEingesehen haben wir schon, dass bei den Restklassen\
        \ die Addition eine (kommutative) Gruppe bildet \u2013 die Multiplikation\
        \ ist assoziativ (und sogar kommutativ) und das Distributivgesetz gilt. Also\
        \ handelt es sich bei \uFFFC um einen Ring."

which starts with \xE4 in the third line. I suspect that this has been written incorrectly in the unpack phase.

psobot commented 4 years ago

This should now be fixed as of version 1.10.0.4 - please let me know if you still run into issues. And thanks for the bug report!

kortenkamp commented 4 years ago

At least I could re-assemble the disassembled Keynote file. Unfortunately, it is smaller than before (missing about 1MB) and Keynote refuses to open it due to a "damaged file" error.

I'll see whether I can create a minimal example by bisecting the file… will take a few days, I fear. But thank you so much for your continuous efforts!