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("""