diff options
author | Scott Hernandez <scotthernandez@gmail.com> | 2013-07-24 16:03:07 -0400 |
---|---|---|
committer | Dan Pasette <dan@10gen.com> | 2013-08-01 20:39:14 -0400 |
commit | 0156435f4a49b665120ffaeed772fd871094ec93 (patch) | |
tree | 27c3aa644b0ddd4f1faee99caffb3e29d4779ac9 | |
parent | 30300a9c025f718ac8ee4c5799e35e67410977a3 (diff) | |
download | mongo-0156435f4a49b665120ffaeed772fd871094ec93.tar.gz |
SERVER-10313: uassert if null char in js field names
-rw-r--r-- | jstests/null_field_name.js | 8 | ||||
-rw-r--r-- | src/mongo/scripting/engine_v8.cpp | 8 |
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; |