summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpencer Jackson <spencer.jackson@mongodb.com>2015-03-23 11:03:47 -0400
committerSpencer Jackson <spencer.jackson@mongodb.com>2015-04-08 11:15:03 -0400
commita2249c005f0721df678eec9b3a2d1dec29e5971d (patch)
treefe74495f757135163ff4b65926769a4104d49519
parent22251f7783f3fcef07f6745da19d3e1a4f792391 (diff)
downloadmongo-a2249c005f0721df678eec9b3a2d1dec29e5971d.tar.gz
SERVER-17647 Compute BinData length
-rw-r--r--src/mongo/scripting/engine_v8.cpp6
-rw-r--r--src/mongo/scripting/v8_db.cpp10
2 files changed, 8 insertions, 8 deletions
diff --git a/src/mongo/scripting/engine_v8.cpp b/src/mongo/scripting/engine_v8.cpp
index 4512ea02bac..1ad61ae9907 100644
--- a/src/mongo/scripting/engine_v8.cpp
+++ b/src/mongo/scripting/engine_v8.cpp
@@ -1514,11 +1514,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 ea6cfe33591..1572ac52a3f 100644
--- a/src/mongo/scripting/v8_db.cpp
+++ b/src/mongo/scripting/v8_db.cpp
@@ -743,8 +743,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]);
}
else if (args.Length() != 0) {
@@ -775,15 +776,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());