diff options
author | Benety Goh <benety@mongodb.com> | 2014-08-01 18:41:52 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2014-09-15 13:35:45 -0400 |
commit | 930050ad3229d242a16467cd4812de3c44766726 (patch) | |
tree | 0198fc0567a5455cee6fd62b235f6a5a67b312fa | |
parent | f02059e077337bc769ad0a3c8cc6b6f28ac2f189 (diff) | |
download | mongo-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.cpp | 21 |
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) { |