Reject duplicate keys. (#22)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a60773b..eece5fe 100644
--- a/CHANGELOG.md
+++ b/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/lib/src/loader.dart b/lib/src/loader.dart
index ea6eb99..a2d681b 100644
--- a/lib/src/loader.dart
+++ b/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/pubspec.yaml b/pubspec.yaml
index cc622c4..d4445d9 100644
--- a/pubspec.yaml
+++ b/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/test/yaml_test.dart b/test/yaml_test.dart
index 8da4b8a..8dee6c6 100644
--- a/test/yaml_test.dart
+++ b/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("""