summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2014-08-01 18:41:52 -0400
committerBenety Goh <benety@mongodb.com>2014-09-15 13:35:45 -0400
commit930050ad3229d242a16467cd4812de3c44766726 (patch)
tree0198fc0567a5455cee6fd62b235f6a5a67b312fa
parentf02059e077337bc769ad0a3c8cc6b6f28ac2f189 (diff)
downloadmongo-930050ad3229d242a16467cd4812de3c44766726.tar.gz
SERVER-14778 hide _native_function and _native_data properties of injected native functions
(cherry picked from commit 6042e906fdd907d53b8231749422f786f19114d8)
-rw-r--r--src/mongo/scripting/engine_v8.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/mongo/scripting/engine_v8.cpp b/src/mongo/scripting/engine_v8.cpp
index eb1609dc4cb..a0e11b99bdd 100644
--- a/src/mongo/scripting/engine_v8.cpp
+++ b/src/mongo/scripting/engine_v8.cpp
@@ -576,11 +576,11 @@ namespace mongo {
string exceptionText;
v8::HandleScope handle_scope;
try {
- v8::Local<v8::External> f =
- 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::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]);
@@ -1120,16 +1120,15 @@ namespace mongo {
injectNative(field, func, _global, data);
}
- void V8Scope::injectNative(const char *field, NativeFunction func, v8::Handle<v8::Object>& obj,
+ void V8Scope::injectNative(const char* field,
+ NativeFunction nativeFunc,
+ v8::Handle<v8::Object>& obj,
void* data) {
v8::Handle<v8::FunctionTemplate> ft = createV8Function(nativeCallback);
- ft->Set(strLitToV8("_native_function"),
- v8::External::New((void*)func),
- v8::PropertyAttribute(v8::DontEnum | v8::ReadOnly));
- ft->Set(strLitToV8("_native_data"),
- v8::External::New(data),
- v8::PropertyAttribute(v8::DontEnum | v8::ReadOnly));
injectV8Function(field, ft, obj);
+ v8::Handle<v8::Function> func = ft->GetFunction();
+ func->SetHiddenValue(strLitToV8("_native_function"), v8::External::New((void*)nativeFunc));
+ func->SetHiddenValue(strLitToV8("_native_data"), v8::External::New(data));
}
v8::Handle<v8::FunctionTemplate> V8Scope::injectV8Function(const char *field, v8Function func) {