mirror of
https://github.com/zebrajr/node.git
synced 2025-12-06 12:20:27 +01:00
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> Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
This commit is contained in:
parent
038b7783a7
commit
70d9f32011
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
20
test/parallel/test-ttywrap-stack.js
Normal file
20
test/parallel/test-ttywrap-stack.js
Normal 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);
|
||||
Loading…
Reference in New Issue
Block a user