diff options
author | C. Scott Ananian <cscott@cscott.net> | 2014-03-06 15:44:18 -0500 |
---|---|---|
committer | Trevor Norris <trev.norris@gmail.com> | 2014-04-02 01:48:34 -0700 |
commit | 08a5b442e42ff67bd5666604eebe69f1b4a1c919 (patch) | |
tree | ef08abc6ccc5fd1e07494b5074cf8b560c89f3cf /src/udp_wrap.cc | |
parent | d4fcb23e38e74d21e04b3a17d10e52949b630ec0 (diff) | |
download | node-new-08a5b442e42ff67bd5666604eebe69f1b4a1c919.tar.gz |
node: add signature to SET_PROTOTYPE_METHOD
This prevents segfaults when a native method is reassigned to a
different object (which corrupts args.This()). When unwrapping,
clients should use args.Holder() instead of args.This().
Closes #6690.
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
Diffstat (limited to 'src/udp_wrap.cc')
-rw-r--r-- | src/udp_wrap.cc | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 01ec324eb6..c1bc6a7311 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -139,7 +139,7 @@ void UDPWrap::GetFD(Local<String>, const PropertyCallbackInfo<Value>& args) { #if !defined(_WIN32) Environment* env = Environment::GetCurrent(args.GetIsolate()); HandleScope scope(env->isolate()); - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); int fd = (wrap == NULL) ? -1 : wrap->handle_.io_watcher.fd; args.GetReturnValue().Set(fd); #endif @@ -150,7 +150,7 @@ void UDPWrap::DoBind(const FunctionCallbackInfo<Value>& args, int family) { Environment* env = Environment::GetCurrent(args.GetIsolate()); HandleScope scope(env->isolate()); - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); // bind(ip, port, flags) assert(args.Length() == 3); @@ -196,7 +196,7 @@ void UDPWrap::Bind6(const FunctionCallbackInfo<Value>& args) { #define X(name, fn) \ void UDPWrap::name(const FunctionCallbackInfo<Value>& args) { \ HandleScope scope(args.GetIsolate()); \ - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); \ + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); \ assert(args.Length() == 1); \ int flag = args[0]->Int32Value(); \ int err = fn(&wrap->handle_, flag); \ @@ -215,7 +215,7 @@ void UDPWrap::SetMembership(const FunctionCallbackInfo<Value>& args, uv_membership membership) { Environment* env = Environment::GetCurrent(args.GetIsolate()); HandleScope scope(env->isolate()); - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); assert(args.Length() == 2); @@ -249,7 +249,7 @@ void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) { HandleScope handle_scope(args.GetIsolate()); Environment* env = Environment::GetCurrent(args.GetIsolate()); - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); // send(req, buffer, offset, length, port, address) assert(args[0]->IsObject()); @@ -320,7 +320,7 @@ void UDPWrap::Send6(const FunctionCallbackInfo<Value>& args) { void UDPWrap::RecvStart(const FunctionCallbackInfo<Value>& args) { Environment* env = Environment::GetCurrent(args.GetIsolate()); HandleScope scope(env->isolate()); - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); int err = uv_udp_recv_start(&wrap->handle_, OnAlloc, OnRecv); // UV_EALREADY means that the socket is already bound but that's okay @@ -333,7 +333,7 @@ void UDPWrap::RecvStart(const FunctionCallbackInfo<Value>& args) { void UDPWrap::RecvStop(const FunctionCallbackInfo<Value>& args) { Environment* env = Environment::GetCurrent(args.GetIsolate()); HandleScope scope(env->isolate()); - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); int r = uv_udp_recv_stop(&wrap->handle_); args.GetReturnValue().Set(r); @@ -345,7 +345,7 @@ void UDPWrap::GetSockName(const FunctionCallbackInfo<Value>& args) { Environment* env = Environment::GetCurrent(args.GetIsolate()); struct sockaddr_storage address; - UDPWrap* wrap = Unwrap<UDPWrap>(args.This()); + UDPWrap* wrap = Unwrap<UDPWrap>(args.Holder()); assert(args[0]->IsObject()); Local<Object> obj = args[0].As<Object>(); |