summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Hernandez <scotthernandez@gmail.com>2013-07-24 16:03:07 -0400
committerDan Pasette <dan@10gen.com>2013-08-01 20:39:14 -0400
commit0156435f4a49b665120ffaeed772fd871094ec93 (patch)
tree27c3aa644b0ddd4f1faee99caffb3e29d4779ac9
parent30300a9c025f718ac8ee4c5799e35e67410977a3 (diff)
downloadmongo-0156435f4a49b665120ffaeed772fd871094ec93.tar.gz
SERVER-10313: uassert if null char in js field names
-rw-r--r--jstests/null_field_name.js8
-rw-r--r--src/mongo/scripting/engine_v8.cpp8
2 files changed, 16 insertions, 0 deletions
diff --git a/jstests/null_field_name.js b/jstests/null_field_name.js
new file mode 100644
index 00000000000..7fa14b0a1bc
--- /dev/null
+++ b/jstests/null_field_name.js
@@ -0,0 +1,8 @@
+// SERVER-10313: Test that null char in field name causes an error when converting to bson
+assert.throws( function () { Object.bsonsize({"a\0":1}); },
+ null,
+ "null char in field name");
+
+assert.throws( function () { Object.bsonsize({"\0asdf":1}); },
+ null,
+ "null char in field name"); \ No newline at end of file
diff --git a/src/mongo/scripting/engine_v8.cpp b/src/mongo/scripting/engine_v8.cpp
index 6ca24c1392b..7bbc9030ae2 100644
--- a/src/mongo/scripting/engine_v8.cpp
+++ b/src/mongo/scripting/engine_v8.cpp
@@ -1572,6 +1572,14 @@ namespace mongo {
void V8Scope::v8ToMongoElement(BSONObjBuilder & b, const StringData& sname,
v8::Handle<v8::Value> value, int depth,
BSONObj* originalParent) {
+
+ // Null char should be at the end, not in the string
+ uassert(16981,
+ str::stream() << "JavaScript property (name) contains a null char "
+ << "which is not allowed in BSON. "
+ << originalParent->jsonString(),
+ (string::npos == sname.find('\0')) );
+
if (value->IsString()) {
b.append(sname, V8String(value));
return;