Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Escaping dollar sign causes issues parsing HCL code with 6.0.0 #181

@iserko

Description

@iserko

When using python-hcl2 6.0.0 string like:

"arn:aws:iam::123456789012:user/$${aws:username}",

raise errors when parsed.

For Terraform escaping the dollar sign is a common occurrence, so this feels rather critical.

Partial exception trace:

  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/hcl2/api.py", line 28, in loads
    tree = parser().parse(text + "\n")
  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/lark/lark.py", line 655, in parse
    return self.parser.parse(text, start=start, on_error=on_error)
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/lark/parser_frontends.py", line 104, in parse
    return self.parser.parse(stream, chosen_start, **kw)
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 42, in parse
    return self.parser.parse(lexer, start)
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 88, in parse
    return self.parse_from_state(parser_state)
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 111, in parse_from_state
    raise e
  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 102, in parse_from_state
    state.feed_token(token)
    ~~~~~~~~~~~~~~~~^^^^^^^
  File "/Users/igor.serko/code/test_python_hcl2/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser_state.py", line 80, in feed_token
    raise UnexpectedToken(token, expected, state=self, interactive_parser=None)
lark.exceptions.UnexpectedToken: Unexpected token Token('COLON', ':') at line 8, column 44.
Expected one of:
	* RBRACE
	* BINARY_OP
	* QMARK

Test script and full exception available at
https://gist.github.com/iserko/264e93178a4b2f6d408d78572c794b36

When I downgrade to 5.1.1 my test input is parsed correctly:

{'data': [{'aws_iam_policy_document': {'my_doc': {'statement': [{'sid': '', 'effect': 'Allow', 'resources': ['arn:aws:iam::123456789012:mfa/$${aws:username}', 'arn:aws:iam::123456789012:user/$${aws:username}'], 'actions': ['iam:List*']}]}}}]}

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions