src: prevent crash in TTYWrap::Initialize

When console.log is called for the first time it initializes
TTYWrap object. However, if there is not enough space on the
V8 stack, creating function template fails and triggers
empty maybe local exception.

PR-URL: https://github.com/nodejs/node/pull/26832
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
Thomas 2019-03-21 02:01:19 +01:00 committed by Ruben Bridgewater
parent b965ac22ca
commit 6fb32ac255
No known key found for this signature in database
GPG Key ID: F07496B3EB3C1762
2 changed files with 26 additions and 5 deletions

View File

@ -32,6 +32,7 @@ namespace node {
using v8::Array;
using v8::Context;
using v8::Function;
using v8::FunctionCallbackInfo;
using v8::FunctionTemplate;
using v8::Integer;
@ -40,7 +41,6 @@ using v8::Object;
using v8::String;
using v8::Value;
void TTYWrap::Initialize(Local<Object> target,
Local<Value> unused,
Local<Context> context,
@ -61,10 +61,11 @@ void TTYWrap::Initialize(Local<Object> target,
env->SetMethodNoSideEffect(target, "isTTY", IsTTY);
env->SetMethodNoSideEffect(target, "guessHandleType", GuessHandleType);
target->Set(env->context(),
ttyString,
t->GetFunction(env->context()).ToLocalChecked()).FromJust();
env->set_tty_constructor_template(t);
Local<Value> func;
if (t->GetFunction(env->context()).ToLocal(&func) &&
target->Set(env->context(), ttyString, func).IsJust()) {
env->set_tty_constructor_template(t);
}
}

View File

@ -0,0 +1,20 @@
'use strict';
const common = require('../common');
// This test ensures that console.log
// will not crash the process if there
// is not enough space on the V8 stack
const done = common.mustCall(() => {});
async function test() {
await test();
}
(async () => {
try {
await test();
} catch (err) {
console.log(err);
}
})().then(done, done);