summaryrefslogtreecommitdiff
path: root/src/udp_wrap.cc
diff options
context:
space:
mode:
authorC. Scott Ananian <cscott@cscott.net>2014-03-06 15:44:18 -0500
committerTrevor Norris <trev.norris@gmail.com>2014-04-02 01:48:34 -0700
commit08a5b442e42ff67bd5666604eebe69f1b4a1c919 (patch)
treeef08abc6ccc5fd1e07494b5074cf8b560c89f3cf /src/udp_wrap.cc
parentd4fcb23e38e74d21e04b3a17d10e52949b630ec0 (diff)
downloadnode-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.cc16
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>();