Menu

#388 Bug in RoundTrip parser triggered by specific comments and indentation

closed
nobody
None
minor
bug
2021-06-24
2021-06-22
No

I've encountered the following behavior, which I believe to be a bug. Since version 0.17.5, this YAML snippet cannot be parsed by the RoundTrip parser:

a:
  b:   # c1

  - c  # c2

It produces the following error:

Traceback (most recent call last):
  File "./loadyaml.py", line 54, in <module>
    test_bug()
  File "./loadyaml.py", line 47, in test_bug
    yaml.load(text_bug)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/main.py", line 434, in load
    return constructor.get_single_data()
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/constructor.py", line 120, in get_single_data
    node = self.composer.get_single_node()
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 76, in get_single_node
    document = self.compose_document()
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 99, in compose_document
    node = self.compose_node(None, None)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 143, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 223, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 143, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 223, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 141, in compose_node
    node = self.compose_sequence_node(anchor)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/composer.py", line 184, in compose_sequence_node
    while not self.parser.check_event(SequenceEndEvent):
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/parser.py", line 146, in check_event
    self.current_event = self.state()
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/parser.py", line 568, in parse_indentless_sequence_entry
    return self.parse_block_node()
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/parser.py", line 343, in parse_block_node
    return self.parse_node(block=True)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/parser.py", line 429, in parse_node
    token = self.scanner.get_token()
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/scanner.py", line 1869, in get_token
    self.tokens[0].add_post_comment(c)
  File "/home/dbdbc/env/py37/lib/python3.7/site-packages/ruamel/yaml/tokens.py", line 69, in add_post_comment
    assert len(self._comment) == 2  # make sure it is version 0
AssertionError

If I remove any of the comments, or indent the last line further to the right, the error disappears. I've attached a small test script with all 4 cases.

Thanks in advance for any comments or a fix!

1 Attachments

Discussion

  • Dimitrios Bariamis

    Just an additional info: Running with python -O and skipping the assertion generates the same output in all four cases, pointing to the assertion being the problem.

     
  • Anthon van der Neut

    • status: open --> resolved
     
  • Anthon van der Neut

    Thanks for reporting and the easy reproducibility.
    This should be fixed in 0.17.10 (now on PyPI)

     
    • Dimitrios Bariamis

      Thanks for the quick fix and release!

       
  • Anthon van der Neut

    • status: resolved --> closed
     

Log in to post a comment.

MongoDB Logo MongoDB