diff options
author | Daniel Bevenius <daniel.bevenius@gmail.com> | 2017-05-18 10:24:50 +0200 |
---|---|---|
committer | Daniel Bevenius <daniel.bevenius@gmail.com> | 2017-05-22 07:31:04 +0200 |
commit | 57f38c6732db71a6145cc5bbfec884f47bb17e16 (patch) | |
tree | 8aa05940c1d80af88f378af96aefcf429a485540 /src/tls_wrap.cc | |
parent | 762b0358b3f5de55a74fe40403964774f80ad33d (diff) | |
download | android-node-v8-57f38c6732db71a6145cc5bbfec884f47bb17e16.tar.gz android-node-v8-57f38c6732db71a6145cc5bbfec884f47bb17e16.tar.bz2 android-node-v8-57f38c6732db71a6145cc5bbfec884f47bb17e16.zip |
src: check IsConstructCall in TLSWrap constructor
Currently it is possible to call TLSWrap() without using new and the
following error message:
FATAL ERROR: v8::Object::SetAlignedPointerInInternalField() Internal
field out of bounds
1: node::Abort()
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
2: node::OnFatalError(char const*, char const*)
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
3: v8::Utils::ReportApiFailure(char const*, char const*)
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
4: v8::Utils::ApiCheck(bool, char const*, char const*)
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
5: v8::InternalFieldOK(v8::internal::Handle<v8::internal::JSReceiver>,
int, char const*)
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
6: v8::Object::SetAlignedPointerInInternalField(int, void*)
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
7: node::TLSWrap::Initialize(v8::Local<v8::Object>,
v8::Local<v8::Value>,
v8::Local<v8::Context>)::$_0::operator()(v8::FunctionCallbackInfo<v8::Value>
const&) const [/Users/danielbevenius/work/nodejs/node/out/Debug/node]
This commit adds a IsConstructCall check which will produce the
following error message:
/Users/danielbevenius/work/nodejs/node/out/Debug/node[2212]:
../src/tls_wrap.cc:936:auto node::TLSWrap::Initialize(Local<v8::Object>,
Local<v8::Value>, Local<v8::Context>)::(anonymous
class)::operator()(const FunctionCallbackInfo<v8::Value> &) const:
Assertion `args.IsConstructCall()' failed.
1: node::Abort()
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
2: node::Assert(char const* const (*) [4])
[/Users/danielbevenius/work/nodejs/node/out/Debug/node]
3: node::TLSWrap::Initialize(v8::Local<v8::Object>,
v8::Local<v8::Value>,
v8::Local<v8::Context>)::$_0::operator()(v8::FunctionCallbackInfo<v8::Value>
const&) const [/Users/danielbevenius/work/nodejs/node/out/Debug/node]
PR-URL: https://github.com/nodejs/node/pull/13097
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'src/tls_wrap.cc')
-rw-r--r-- | src/tls_wrap.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc index e6de942371..351f8a34fe 100644 --- a/src/tls_wrap.cc +++ b/src/tls_wrap.cc @@ -933,6 +933,7 @@ void TLSWrap::Initialize(Local<Object> target, env->SetMethod(target, "wrap", TLSWrap::Wrap); auto constructor = [](const FunctionCallbackInfo<Value>& args) { + CHECK(args.IsConstructCall()); args.This()->SetAlignedPointerInInternalField(0, nullptr); }; auto t = env->NewFunctionTemplate(constructor); |