js_stream: prevent abort if isalive doesn't exist

Attempting to check IsAlive() on a JSStream before the isAlive()
callback can be set in JS causes a CHECK to fail in MakeCallback.
Instead return false if the callback hasn't been set.

PR-URL: https://github.com/nodejs/node/pull/3282
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
This commit is contained in:
Trevor Norris 2015-10-08 10:57:12 -06:00
parent ded4f91eef
commit 178ac3367f
2 changed files with 12 additions and 1 deletions

View File

@ -44,7 +44,10 @@ AsyncWrap* JSStream::GetAsyncWrap() {
bool JSStream::IsAlive() {
return MakeCallback(env()->isalive_string(), 0, nullptr)->IsTrue();
v8::Local<v8::Value> fn = object()->Get(env()->isalive_string());
if (!fn->IsFunction())
return false;
return MakeCallback(fn.As<v8::Function>(), 0, nullptr)->IsTrue();
}

View File

@ -0,0 +1,8 @@
'use strict';
const common = require('../common');
const util = require('util');
const JSStream = process.binding('js_stream').JSStream;
// Testing if will abort when properties are printed.
util.inspect(new JSStream());