Index: mojo/public/js/codec.js |
diff --git a/mojo/public/js/codec.js b/mojo/public/js/codec.js |
index 5440abed92d3651e684a492f97673bee286d9d68..f071d2f870923c6cd2202f7a692b3a17d853c140 100644 |
--- a/mojo/public/js/codec.js |
+++ b/mojo/public/js/codec.js |
@@ -8,7 +8,9 @@ define("mojo/public/js/codec", [ |
], function(unicode, buffer) { |
var kErrorUnsigned = "Passing negative value to unsigned"; |
- var kErrorArray = "Passing non-array-like to array"; |
+ var kErrorArray = "Passing non Array for array type"; |
+ var kErrorString = "Passing non String for string type"; |
+ var kErrorMap = "Passing non Map for map type"; |
// Memory ------------------------------------------------------------------- |
@@ -353,7 +355,7 @@ define("mojo/public/js/codec", [ |
this.encodePointer(val); |
return; |
} |
- if (val.length === undefined) { |
+ if (!(val instanceof Array)) { |
throw new Error(kErrorArray); |
} |
Ryan Sleevi
2014/12/30 04:54:17
The original code had the benefit that it properly
|
var numberOfElements = val.length; |
@@ -369,6 +371,10 @@ define("mojo/public/js/codec", [ |
this.encodePointer(val); |
return; |
} |
+ // This only accepts string literals, not objects like new String("foo"). |
+ if (typeof(val) !== "string") { |
+ throw new Error(kErrorString); |
+ } |
var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); |
var encoder = this.createAndEncodeEncoder(encodedSize); |
encoder.encodeString(val); |
@@ -394,6 +400,9 @@ define("mojo/public/js/codec", [ |
this.encodePointer(val); |
return; |
} |
+ if (!(val instanceof Map)) { |
Ryan Sleevi
2014/12/30 04:54:17
This is another surprising change, as it prevents
|
+ throw new Error(kErrorMap); |
+ } |
var encodedSize = kStructHeaderSize + kMapStructPayloadSize; |
var encoder = this.createAndEncodeEncoder(encodedSize); |
encoder.encodeMap(keyClass, valueClass, val); |