@@ -90,13 +90,18 @@ void StreamWrap::UpdateWriteQueueSize() {
9090
9191void StreamWrap::ReadStart (const FunctionCallbackInfo<Value>& args) {
9292 StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder ());
93+ if (!IsAlive (wrap))
94+ return args.GetReturnValue ().Set (UV_EINVAL);
95+
9396 int err = uv_read_start (wrap->stream (), OnAlloc, OnRead);
9497 args.GetReturnValue ().Set (err);
9598}
9699
97100
98101void StreamWrap::ReadStop (const FunctionCallbackInfo<Value>& args) {
99102 StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder ());
103+ if (!IsAlive (wrap))
104+ return args.GetReturnValue ().Set (UV_EINVAL);
100105 int err = uv_read_stop (wrap->stream ());
101106 args.GetReturnValue ().Set (err);
102107}
@@ -183,6 +188,8 @@ void StreamWrap::WriteBuffer(const FunctionCallbackInfo<Value>& args) {
183188 Environment* env = Environment::GetCurrent (args);
184189
185190 StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder ());
191+ if (!IsAlive (wrap))
192+ return args.GetReturnValue ().Set (UV_EINVAL);
186193
187194 CHECK (args[0 ]->IsObject ());
188195 CHECK (Buffer::HasInstance (args[1 ]));
@@ -240,6 +247,8 @@ void StreamWrap::WriteStringImpl(const FunctionCallbackInfo<Value>& args) {
240247 int err;
241248
242249 StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder ());
250+ if (!IsAlive (wrap))
251+ return args.GetReturnValue ().Set (UV_EINVAL);
243252
244253 CHECK (args[0 ]->IsObject ());
245254 CHECK (args[1 ]->IsString ());
@@ -367,6 +376,8 @@ void StreamWrap::Writev(const FunctionCallbackInfo<Value>& args) {
367376 Environment* env = Environment::GetCurrent (args);
368377
369378 StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder ());
379+ if (!IsAlive (wrap))
380+ return args.GetReturnValue ().Set (UV_EINVAL);
370381
371382 CHECK (args[0 ]->IsObject ());
372383 CHECK (args[1 ]->IsArray ());
@@ -493,6 +504,8 @@ void StreamWrap::WriteBinaryString(const FunctionCallbackInfo<Value>& args) {
493504
494505void StreamWrap::SetBlocking (const FunctionCallbackInfo<Value>& args) {
495506 StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder ());
507+ if (!IsAlive (wrap))
508+ return args.GetReturnValue ().Set (UV_EINVAL);
496509 CHECK_GT (args.Length (), 0 );
497510 int err = uv_stream_set_blocking (wrap->stream (), args[0 ]->IsTrue ());
498511 args.GetReturnValue ().Set (err);
@@ -537,6 +550,8 @@ void StreamWrap::Shutdown(const FunctionCallbackInfo<Value>& args) {
537550 Environment* env = Environment::GetCurrent (args);
538551
539552 StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder ());
553+ if (!IsAlive (wrap))
554+ return args.GetReturnValue ().Set (UV_EINVAL);
540555
541556 CHECK (args[0 ]->IsObject ());
542557 Local<Object> req_wrap_obj = args[0 ].As <Object>();
0 commit comments