Reject duplicate keys. (dart-lang/yaml#22)
diff --git a/pkgs/yaml/CHANGELOG.md b/pkgs/yaml/CHANGELOG.md index a60773b..eece5fe 100644 --- a/pkgs/yaml/CHANGELOG.md +++ b/pkgs/yaml/CHANGELOG.md
@@ -1,3 +1,7 @@ +## 2.1.12 + +* Properly refuse mappings with duplicate keys. + ## 2.1.11 * Fix an infinite loop when parsing some invalid documents.
diff --git a/pkgs/yaml/lib/src/loader.dart b/pkgs/yaml/lib/src/loader.dart index ea6eb99..a2d681b 100644 --- a/pkgs/yaml/lib/src/loader.dart +++ b/pkgs/yaml/lib/src/loader.dart
@@ -156,6 +156,10 @@ while (event.type != EventType.MAPPING_END) { var key = _loadNode(event); var value = _loadNode(_parser.parse()); + if (children.containsKey(key)) { + throw new YamlException("Duplicate mapping key.", key.span); + } + children[key] = value; event = _parser.parse(); }
diff --git a/pkgs/yaml/pubspec.yaml b/pkgs/yaml/pubspec.yaml index cc622c4..d4445d9 100644 --- a/pkgs/yaml/pubspec.yaml +++ b/pkgs/yaml/pubspec.yaml
@@ -1,5 +1,5 @@ name: yaml -version: 2.1.11 +version: 2.1.12 author: "Dart Team <misc@dartlang.org>" homepage: https://github.com/dart-lang/yaml description: A parser for YAML.
diff --git a/pkgs/yaml/test/yaml_test.dart b/pkgs/yaml/test/yaml_test.dart index 8da4b8a..8dee6c6 100644 --- a/pkgs/yaml/test/yaml_test.dart +++ b/pkgs/yaml/test/yaml_test.dart
@@ -35,6 +35,10 @@ expectYamlFails("{"); }); + test("duplicate mapping keys", () { + expectYamlFails("{a: 1, a: 2}"); + }); + group("documents that declare version", () { test("1.0", () { expectYamlFails("""