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-03-26 08:32:07 -0400
commit3f77ed4bb9b54f30c9f8353198adb95728b52781 (patch)
treeefd42941400b1a439f0eddd3faf02a0d67f87d8e
parent3c0a8d6281d40b4880c8f3cc0a958644fd651bda (diff)
downloadmongo-3f77ed4bb9b54f30c9f8353198adb95728b52781.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 f1238ee4844..12924202bb6 100644
--- a/src/mongo/scripting/engine_v8.cpp
+++ b/src/mongo/scripting/engine_v8.cpp
@@ -1563,11 +1563,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 1f784c24b0c..f0defe687eb 100644
--- a/src/mongo/scripting/v8_db.cpp
+++ b/src/mongo/scripting/v8_db.cpp
@@ -883,8 +883,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::PropertyAttribute::ReadOnly);
+ it->ForceSet(scope->v8StringData("type"), type, v8::PropertyAttribute::ReadOnly);
it->SetInternalField(0, args[1]);
return it;
@@ -911,15 +912,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());