js_stream: prevent abort if isalive doesn't exist
authorTrevor Norris <trev.norris@gmail.com>
Thu, 8 Oct 2015 16:57:12 +0000 (10:57 -0600)
committerTrevor Norris <trev.norris@gmail.com>
Thu, 8 Oct 2015 17:51:15 +0000 (11:51 -0600)
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>
src/js_stream.cc
test/parallel/test-js-stream-call-properties.js [new file with mode: 0644]

index 77595ad..25938f1 100644 (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();
 }
 
 
diff --git a/test/parallel/test-js-stream-call-properties.js b/test/parallel/test-js-stream-call-properties.js
new file mode 100644 (file)
index 0000000..c6b1adb
--- /dev/null
@@ -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());