diff --git a/docs/changelog.rst b/docs/changelog.rst index 5ad23f935..0eebd16a9 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -72,6 +72,8 @@ Detailed list of changes - Splits layout: Fix :ac:`move_window_forward` not working (:iss:`7264`) +- macOS: Fix an abort due to an assertion when a program tries to set an invalid window title (:iss:`7271`) + 0.33.1 [2024-03-21] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index de1b641a7..79a274764 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -1963,9 +1963,11 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window) window->ns.object = nil; } -void _glfwPlatformSetWindowTitle(_GLFWwindow* window UNUSED, const char* title) +void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) { + if (!title) return; NSString* string = @(title); + if (!string) return; // the runtime failed to convert title to an NSString [window->ns.object setTitle:string]; // HACK: Set the miniwindow title explicitly as setTitle: doesn't update it // if the window lacks NSWindowStyleMaskTitled diff --git a/kitty/cocoa_window.m b/kitty/cocoa_window.m index f70d7defc..b89fca4e8 100644 --- a/kitty/cocoa_window.m +++ b/kitty/cocoa_window.m @@ -748,12 +748,14 @@ cocoa_create_global_menu(void) { void cocoa_update_menu_bar_title(PyObject *pytitle) { + if (!pytitle) return; NSString *title = nil; if (OPT(macos_menubar_title_max_length) > 0 && PyUnicode_GetLength(pytitle) > OPT(macos_menubar_title_max_length)) { static char fmt[64]; snprintf(fmt, sizeof(fmt), "%%%ld.%ldU%%s", OPT(macos_menubar_title_max_length), OPT(macos_menubar_title_max_length)); RAII_PyObject(st, PyUnicode_FromFormat(fmt, pytitle, "…")); if (st) title = @(PyUnicode_AsUTF8(st)); + else PyErr_Print(); } else { title = @(PyUnicode_AsUTF8(pytitle)); } diff --git a/kitty/glfw.c b/kitty/glfw.c index da6d1ae34..1f73c3a9f 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -98,7 +98,8 @@ update_menu_bar_title(PyObject *title UNUSED) { static char buf[2048]; strip_csi_(PyUnicode_AsUTF8(title), buf, arraysz(buf)); RAII_PyObject(stitle, PyUnicode_FromString(buf)); - cocoa_update_menu_bar_title(stitle); + if (stitle) cocoa_update_menu_bar_title(stitle); + else PyErr_Print(); #endif }