diff --git a/test/test.py b/test/test.py index 6ec5e78..1a7b164 100755 --- a/test/test.py +++ b/test/test.py @@ -251,5 +251,16 @@ def test_abbrev_opt_collisions(self): def test_entity_expansion_defense(self): self.run_yq(bomb_yaml, ["."], expect_exit_codes=["yq: Error: detected unsafe YAML entity expansion"]) + def test_yaml_type_tags(self): + bin_yaml = "example: !!binary Zm9vYmFyCg==" + self.assertEqual(self.run_yq(bin_yaml, ["."]), "") + self.assertEqual(self.run_yq(bin_yaml, ["-y", "."]), "example: Zm9vYmFyCg==\n") + set_yaml = "example: !!set { Boston Red Sox, Detroit Tigers, New York Yankees }" + self.assertEqual(self.run_yq(set_yaml, ["."]), "") + self.assertEqual( + self.run_yq(set_yaml, ["-y", "."]), + "example:\n Boston Red Sox: null\n Detroit Tigers: null\n New York Yankees: null\n" + ) + if __name__ == '__main__': unittest.main() diff --git a/yq/loader.py b/yq/loader.py index cf7df00..268312e 100644 --- a/yq/loader.py +++ b/yq/loader.py @@ -84,4 +84,6 @@ def parse_unknown_tags(loader, tag_suffix, node): loader_class.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, construct_mapping) loader_class.add_constructor(yaml.resolver.BaseResolver.DEFAULT_SEQUENCE_TAG, construct_sequence) loader_class.add_multi_constructor('', parse_unknown_tags) + loader_class.yaml_constructors.pop("tag:yaml.org,2002:binary", None) + loader_class.yaml_constructors.pop("tag:yaml.org,2002:set", None) return loader_class