Skip to content

Commit e233094

Browse files
codebyteretargos
authored andcommitted
src: allow preventing SetPrepareStackTraceCallback
Node.js sets a stack trace handler specific to the v8::Context corresponding to the current Environment. When Electron is running in a non-Node.js v8::Context (e.g in the renderer process with contextIsolation enabled), there will be no correspondent Environment - we therefore need to prevent this handler being set so that Blink falls back to its default handling and displays the correct stacktrace. PR-URL: #36447 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com>
1 parent 0baa610 commit e233094

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

src/api/environment.cc

+5-3
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,11 @@ void SetIsolateErrorHandlers(v8::Isolate* isolate, const IsolateSettings& s) {
231231
s.fatal_error_callback : OnFatalError;
232232
isolate->SetFatalErrorHandler(fatal_error_cb);
233233

234-
auto* prepare_stack_trace_cb = s.prepare_stack_trace_callback ?
235-
s.prepare_stack_trace_callback : PrepareStackTraceCallback;
236-
isolate->SetPrepareStackTraceCallback(prepare_stack_trace_cb);
234+
if ((s.flags & SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK) == 0) {
235+
auto* prepare_stack_trace_cb = s.prepare_stack_trace_callback ?
236+
s.prepare_stack_trace_callback : PrepareStackTraceCallback;
237+
isolate->SetPrepareStackTraceCallback(prepare_stack_trace_cb);
238+
}
237239
}
238240

239241
void SetIsolateMiscHandlers(v8::Isolate* isolate, const IsolateSettings& s) {

src/node.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
324324
enum IsolateSettingsFlags {
325325
MESSAGE_LISTENER_WITH_ERROR_LEVEL = 1 << 0,
326326
DETAILED_SOURCE_POSITIONS_FOR_PROFILING = 1 << 1,
327-
SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK = 1 << 2
327+
SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK = 1 << 2,
328+
SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK = 1 << 3
328329
};
329330

330331
struct IsolateSettings {

0 commit comments

Comments
 (0)