Skip to content

Commit

Permalink
Check project settings live before lookup in crash handler
Browse files Browse the repository at this point in the history
In x11, windows and osx crash handlers, check project settings exists
before looking up the crash handler message setting.
Avoids crashing the crash handler when handling a crash outside project
settings lifetime. Instead omitting the configurable message and
continuing with trace dump.
  • Loading branch information
ibrahn committed May 23, 2019
1 parent 7c73a74 commit 63068e2
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
7 changes: 6 additions & 1 deletion platform/osx/crash_handler_osx.mm
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,12 @@ static void handle_crash(int sig) {
void *bt_buffer[256];
size_t size = backtrace(bt_buffer, 256);
String _execpath = OS::get_singleton()->get_executable_path();
String msg = GLOBAL_GET("debug/settings/crash_handler/message");

String msg;
const ProjectSettings *proj_settings = ProjectSettings::get_singleton();
if (proj_settings) {
msg = proj_settings->get("debug/settings/crash_handler/message");
}

// Dump the backtrace to stderr with a message to the user
fprintf(stderr, "%s: Program crashed with signal %d\n", __FUNCTION__, sig);
Expand Down
9 changes: 7 additions & 2 deletions platform/windows/crash_handler_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,11 +166,16 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
line.SizeOfStruct = sizeof(line);
IMAGE_NT_HEADERS *h = ImageNtHeader(base);
DWORD image_type = h->FileHeader.Machine;
int n = 0;
String msg = GLOBAL_GET("debug/settings/crash_handler/message");

String msg;
const ProjectSettings *proj_settings = ProjectSettings::get_singleton();
if (proj_settings) {
msg = proj_settings->get("debug/settings/crash_handler/message");
}

fprintf(stderr, "Dumping the backtrace. %ls\n", msg.c_str());

int n = 0;
do {
if (skip_first) {
skip_first = false;
Expand Down
7 changes: 6 additions & 1 deletion platform/x11/crash_handler_x11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,12 @@ static void handle_crash(int sig) {
void *bt_buffer[256];
size_t size = backtrace(bt_buffer, 256);
String _execpath = OS::get_singleton()->get_executable_path();
String msg = GLOBAL_GET("debug/settings/crash_handler/message");

String msg;
const ProjectSettings *proj_settings = ProjectSettings::get_singleton();
if (proj_settings) {
msg = proj_settings->get("debug/settings/crash_handler/message");
}

// Dump the backtrace to stderr with a message to the user
fprintf(stderr, "%s: Program crashed with signal %d\n", __FUNCTION__, sig);
Expand Down

0 comments on commit 63068e2

Please sign in to comment.