Skip to content

Commit 6836533

Browse files
authored
Raise error if any key in a mapping is null (#3073)
* Null keys will raise an error * Raise errors when a key in an object is None
1 parent 4a3dd98 commit 6836533

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

src/cfnlint/decode/cfn_yaml.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,19 @@ def construct_yaml_map(self, node):
8888
key = self.construct_object(key_node, False)
8989
value = self.construct_object(value_node, False)
9090

91+
if key is None:
92+
raise CfnParseError(
93+
self.filename,
94+
[
95+
build_match(
96+
filename=self.filename,
97+
message=f"Null key {key_node.value!r} not supported (line {key_node.start_mark.line + 1})",
98+
line_number=key_node.start_mark.line,
99+
column_number=key_node.start_mark.column,
100+
key=key_node.value,
101+
),
102+
],
103+
)
91104
for key_dup in mapping:
92105
if key_dup == key:
93106
if not matches:

test/unit/module/decode/test_decode.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
import yaml
1212
from yaml.scanner import ScannerError
1313

14-
import cfnlint.decode.decode # pylint: disable=E0401
14+
import cfnlint.decode.cfn_json
15+
import cfnlint.decode.cfn_yaml
16+
import cfnlint.decode.decode
1517

1618

1719
class TestDecode(BaseTestCase):
@@ -125,3 +127,14 @@ def test_decode_yaml_error(self, mock_cfn_yaml):
125127
self.assertEqual(len(matches), 1)
126128
self.assertEqual(matches[0].rule.id, "E0000")
127129
self.assertEqual(matches[0].message, err_msg)
130+
131+
def test_decode_yaml_null_key(self):
132+
err_msg = "Null key 'null' not supported (line 3)"
133+
with self.assertRaises(cfnlint.decode.cfn_yaml.CfnParseError) as e:
134+
cfnlint.decode.cfn_yaml.loads(
135+
"""
136+
Parameters:
137+
null: test
138+
"""
139+
)
140+
self.assertEqual(str(e.exception), err_msg)

0 commit comments

Comments
 (0)