Merge branch 'reosablo.suggestion-for-CanonicalizedMap-spec'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 04f883f..4ca35a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
-## 1.2.1
+## 1.3.0
 
-* Add lowerBound to binary search for values that might not be present.
+* Add `lowerBound` to binary search for values that might not be present.
+
+* Verify that the is valid for `CanonicalMap.[]`.
 
 ## 1.2.0
 
diff --git a/lib/src/canonicalized_map.dart b/lib/src/canonicalized_map.dart
index 7ee3f86..21fb83d 100644
--- a/lib/src/canonicalized_map.dart
+++ b/lib/src/canonicalized_map.dart
@@ -64,6 +64,7 @@
   }
 
   void operator []=(K key, V value) {
+    if (!_isValidKey(key)) return;
     _base[_canonicalize(key)] = new Pair(key, value);
   }
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 3595f9c..0679954 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: collection
-version: 1.2.1-dev
+version: 1.3.0
 author: Dart Team <misc@dartlang.org>
 description: Collections and utilities functions and classes related to collections.
 homepage: https://www.github.com/dart-lang/collection
diff --git a/test/canonicalized_map_test.dart b/test/canonicalized_map_test.dart
index f5f009b..33e663f 100644
--- a/test/canonicalized_map_test.dart
+++ b/test/canonicalized_map_test.dart
@@ -22,6 +22,13 @@
       expect(map["foo"], isNull);
     });
 
+    test("set affects nothing for uncanonicalizable key", () {
+      map["foo"] = "value";
+      expect(map["foo"], isNull);
+      expect(map.containsKey("foo"), isFalse);
+      expect(map.length, equals(0));
+    });
+
     test("canonicalizes keys for addAll", () {
       map.addAll({
         "1": "value 1",