Skip to content

Commit fa84e91

Browse files
joyeecheungBethGriggs
authored andcommitted
src: create env->inspector_console_api_object earlier
Previously we create env->inspector_console_api_object() when `process.binding('inspector')` is called, which may be too late if the inspector console is used before the first call to `process.binding('inspector')` - that is possible when using `--inspect-brk-node`. Setting a breakpoint and using the inspector console before that would crash the process. This patch moves the initialization of the console API object to the point when Environment is initialized so that `installAdditionalCommandLineAPI()` can be essentially a noop if we use the inspector console before the inspector binding is initialized instead of crashing on an empty object. PR-URL: #24906 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
1 parent 3bdff05 commit fa84e91

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

src/env.cc

+7
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,13 @@ void Environment::Start(const std::vector<std::string>& args,
241241
static uv_once_t init_once = UV_ONCE_INIT;
242242
uv_once(&init_once, InitThreadLocalOnce);
243243
uv_key_set(&thread_local_env, this);
244+
245+
#if HAVE_INSPECTOR
246+
// This needs to be set before we start the inspector
247+
Local<Object> obj = Object::New(isolate());
248+
CHECK(obj->SetPrototype(context(), Null(isolate())).FromJust());
249+
set_inspector_console_api_object(obj);
250+
#endif // HAVE_INSPECTOR
244251
}
245252

246253
void Environment::RegisterHandleCleanups() {

src/inspector_agent.cc

+1
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ class NodeInspectorClient : public V8InspectorClient {
505505
void installAdditionalCommandLineAPI(Local<Context> context,
506506
Local<Object> target) override {
507507
Local<Object> console_api = env_->inspector_console_api_object();
508+
CHECK(!console_api.IsEmpty());
508509

509510
Local<Array> properties =
510511
console_api->GetOwnPropertyNames(context).ToLocalChecked();

src/inspector_js_api.cc

-6
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,6 @@ void Url(const FunctionCallbackInfo<Value>& args) {
277277
void Initialize(Local<Object> target, Local<Value> unused,
278278
Local<Context> context, void* priv) {
279279
Environment* env = Environment::GetCurrent(context);
280-
{
281-
auto obj = Object::New(env->isolate());
282-
auto null = Null(env->isolate());
283-
CHECK(obj->SetPrototype(context, null).FromJust());
284-
env->set_inspector_console_api_object(obj);
285-
}
286280

287281
Agent* agent = env->inspector_agent();
288282
env->SetMethod(target, "consoleCall", InspectorConsoleCall);

0 commit comments

Comments
 (0)