summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2014-08-01 19:00:32 -0400
committerBenety Goh <benety@mongodb.com>2014-08-12 19:35:21 -0400
commit82e53c90774707a51e3f1b82c5b672a3e3700640 (patch)
tree819649acec849caffcb9b30c1b0e00f791e874d6
parent6042e906fdd907d53b8231749422f786f19114d8 (diff)
downloadmongo-82e53c90774707a51e3f1b82c5b672a3e3700640.tar.gz
SERVER-14778 (v8-3.25) hide _native_function and _native_data properties of injected native functions
-rw-r--r--src/mongo/scripting/engine_v8-3.25.cpp25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/mongo/scripting/engine_v8-3.25.cpp b/src/mongo/scripting/engine_v8-3.25.cpp
index 4016f2cf9ca..392284cc2f3 100644
--- a/src/mongo/scripting/engine_v8-3.25.cpp
+++ b/src/mongo/scripting/engine_v8-3.25.cpp
@@ -617,13 +617,11 @@ namespace mongo {
string exceptionText;
v8::EscapableHandleScope handle_scope(args.GetIsolate());
try {
- v8::Local<v8::External> f =
- v8::Local<v8::External>::Cast(args.Callee()->Get(
- scope->strLitToV8("_native_function")));
+ v8::Local<v8::External> f = args.Callee()->GetHiddenValue(
+ scope->strLitToV8("_native_function")).As<v8::External>();
NativeFunction function = (NativeFunction)(f->Value());
- v8::Local<v8::External> data =
- v8::Local<v8::External>::Cast(args.Callee()->Get(
- scope->strLitToV8("_native_data")));
+ v8::Local<v8::External> data = args.Callee()->GetHiddenValue(
+ scope->strLitToV8("_native_data")).As<v8::External>();
BSONObjBuilder b;
for (int i = 0; i < args.Length(); ++i)
scope->v8ToMongoElement(b, BSONObjBuilder::numStr(i), args[i]);
@@ -1205,16 +1203,17 @@ namespace mongo {
injectNative(field, func, global, data);
}
- void V8Scope::injectNative(const char *field, NativeFunction func, v8::Local<v8::Object>& obj,
+ void V8Scope::injectNative(const char* field,
+ NativeFunction nativeFunc,
+ v8::Local<v8::Object>& obj,
void* data) {
v8::Local<v8::FunctionTemplate> ft = createV8Function(nativeCallback);
- ft->Set(strLitToV8("_native_function"),
- v8::External::New(_isolate, (void*)func),
- v8::PropertyAttribute(v8::DontEnum | v8::ReadOnly));
- ft->Set(strLitToV8("_native_data"),
- v8::External::New(_isolate, data),
- v8::PropertyAttribute(v8::DontEnum | v8::ReadOnly));
injectV8Function(field, ft, obj);
+ v8::Local<v8::Function> func = ft->GetFunction();
+ func->SetHiddenValue(strLitToV8("_native_function"),
+ v8::External::New(_isolate, (void*)nativeFunc));
+ func->SetHiddenValue(strLitToV8("_native_data"),
+ v8::External::New(_isolate, data));
}
v8::Local<v8::FunctionTemplate> V8Scope::injectV8Function(const char *field,