diff options
author | Spencer Jackson <spencer.jackson@mongodb.com> | 2015-03-23 11:03:47 -0400 |
---|---|---|
committer | Spencer Jackson <spencer.jackson@mongodb.com> | 2015-04-08 10:46:09 -0400 |
commit | 6f1f5bbc9fe884b0367752dc661fd88063ecb225 (patch) | |
tree | f0bfd3a81ab9dd708a323929e5657f9e4715a772 /src | |
parent | 0b314f3157d987fd59194bc29dc780d9be367598 (diff) | |
download | mongo-6f1f5bbc9fe884b0367752dc661fd88063ecb225.tar.gz |
SERVER-17647 Compute BinData length
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/scripting/engine_v8.cpp | 6 | ||||
-rw-r--r-- | src/mongo/scripting/v8_db.cpp | 10 |
2 files changed, 8 insertions, 8 deletions
diff --git a/src/mongo/scripting/engine_v8.cpp b/src/mongo/scripting/engine_v8.cpp index a0e11b99bdd..827f4cbd241 100644 --- a/src/mongo/scripting/engine_v8.cpp +++ b/src/mongo/scripting/engine_v8.cpp @@ -1532,11 +1532,11 @@ namespace mongo { verify(BinDataFT()->HasInstance(obj)); verify(obj->InternalFieldCount() == 1); - int len = obj->Get(strLitToV8("len"))->ToInt32()->Value(); + std::string binData(base64::decode(toSTLString(obj->GetInternalField(0)))); b.appendBinData(elementName, - len, + binData.size(), mongo::BinDataType(obj->Get(strLitToV8("type"))->ToInt32()->Value()), - base64::decode(toSTLString(obj->GetInternalField(0))).c_str()); + binData.c_str()); } OID V8Scope::v8ToMongoObjectID(v8::Handle<v8::Object> obj) { diff --git a/src/mongo/scripting/v8_db.cpp b/src/mongo/scripting/v8_db.cpp index 2bc86b5e32b..a20aa099591 100644 --- a/src/mongo/scripting/v8_db.cpp +++ b/src/mongo/scripting/v8_db.cpp @@ -785,8 +785,9 @@ namespace mongo { // uassert if invalid base64 string string tmpBase64 = base64::decode(*utf); // length property stores the decoded length - it->ForceSet(scope->v8StringData("len"), v8::Number::New(tmpBase64.length())); - it->ForceSet(scope->v8StringData("type"), type); + it->ForceSet(scope->v8StringData("len"), v8::Number::New(tmpBase64.length()), + v8::ReadOnly); + it->ForceSet(scope->v8StringData("type"), type, v8::ReadOnly); it->SetInternalField(0, args[1]); return it; @@ -813,15 +814,14 @@ namespace mongo { v8::Handle<v8::Value> binDataToHex(V8Scope* scope, const v8::Arguments& args) { v8::Handle<v8::Object> it = args.This(); verify(scope->BinDataFT()->HasInstance(it)); - int len = v8::Handle<v8::Number>::Cast(it->Get(v8::String::New("len")))->Int32Value(); verify(it->InternalFieldCount() == 1); string data = base64::decode(toSTLString(it->GetInternalField(0))); stringstream ss; ss.setf (ios_base::hex, ios_base::basefield); ss.fill ('0'); ss.setf (ios_base::right, ios_base::adjustfield); - for(int i = 0; i < len; i++) { - unsigned v = (unsigned char) data[i]; + for(std::string::iterator it = data.begin(); it != data.end(); ++it) { + unsigned v = (unsigned char) *it; ss << setw(2) << v; } return v8::String::New(ss.str().c_str()); |