key-duplicates: Don't crash on redundant closing brackets or braces

Don't break on empty `context` stack when invalid YAML:

    [ a, b, c ] ]
    {a: 1, b: 2} }
This commit is contained in:
Jérôme Alet 2022-04-20 20:00:08 +11:00 committed by GitHub
parent 2f423117c1
commit c268a82c5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 1 deletions

View File

@ -87,6 +87,10 @@ class KeyDuplicatesTestCase(RuleTestCase):
'anchor_reference:\n' 'anchor_reference:\n'
' <<: *anchor_one\n' ' <<: *anchor_one\n'
' <<: *anchor_two\n', conf) ' <<: *anchor_two\n', conf)
self.check('---\n'
'{a:1, b:2}}\n', conf, problem=(2, 11, 'syntax'))
self.check('---\n'
'[a, b, c]]\n', conf, problem=(2, 10, 'syntax'))
def test_enabled(self): def test_enabled(self):
conf = 'key-duplicates: enable' conf = 'key-duplicates: enable'
@ -165,6 +169,10 @@ class KeyDuplicatesTestCase(RuleTestCase):
'anchor_reference:\n' 'anchor_reference:\n'
' <<: *anchor_one\n' ' <<: *anchor_one\n'
' <<: *anchor_two\n', conf) ' <<: *anchor_two\n', conf)
self.check('---\n'
'{a:1, b:2}}\n', conf, problem=(2, 11, 'syntax'))
self.check('---\n'
'[a, b, c]]\n', conf, problem=(2, 10, 'syntax'))
def test_key_tokens_in_flow_sequences(self): def test_key_tokens_in_flow_sequences(self):
conf = 'key-duplicates: enable' conf = 'key-duplicates: enable'

View File

@ -84,7 +84,8 @@ def check(conf, token, prev, next, nextnext, context):
elif isinstance(token, (yaml.BlockEndToken, elif isinstance(token, (yaml.BlockEndToken,
yaml.FlowMappingEndToken, yaml.FlowMappingEndToken,
yaml.FlowSequenceEndToken)): yaml.FlowSequenceEndToken)):
context['stack'].pop() if len(context['stack']) > 0:
context['stack'].pop()
elif (isinstance(token, yaml.KeyToken) and elif (isinstance(token, yaml.KeyToken) and
isinstance(next, yaml.ScalarToken)): isinstance(next, yaml.ScalarToken)):
# This check is done because KeyTokens can be found inside flow # This check is done because KeyTokens can be found inside flow