wayland: Never commit with an undefined window title If libdecor performs a commit with the frame title being undefined, a crash can occur within the library or its plugins. Always ensure that the title is set to a valid string to avoid this.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c
index 571bce0..68d2d08 100644
--- a/src/video/wayland/SDL_waylandwindow.c
+++ b/src/video/wayland/SDL_waylandwindow.c
@@ -2069,26 +2069,25 @@ void Wayland_SetWindowTitle(_THIS, SDL_Window * window)
{
SDL_WindowData *wind = window->driverdata;
SDL_VideoData *viddata = _this->driverdata;
+ const char *title = window->title ? window->title : "";
if (WINDOW_IS_XDG_POPUP(window)) {
return;
}
- if (window->title != NULL) {
#ifdef HAVE_LIBDECOR_H
- if (WINDOW_IS_LIBDECOR(viddata, window)) {
- if (wind->shell_surface.libdecor.frame == NULL) {
- return; /* Can't do anything yet, wait for ShowWindow */
- }
- libdecor_frame_set_title(wind->shell_surface.libdecor.frame, window->title);
- } else
+ if (WINDOW_IS_LIBDECOR(viddata, window)) {
+ if (wind->shell_surface.libdecor.frame == NULL) {
+ return; /* Can't do anything yet, wait for ShowWindow */
+ }
+ libdecor_frame_set_title(wind->shell_surface.libdecor.frame, title);
+ } else
#endif
if (viddata->shell.xdg) {
- if (wind->shell_surface.xdg.roleobj.toplevel == NULL) {
- return; /* Can't do anything yet, wait for ShowWindow */
- }
- xdg_toplevel_set_title(wind->shell_surface.xdg.roleobj.toplevel, window->title);
+ if (wind->shell_surface.xdg.roleobj.toplevel == NULL) {
+ return; /* Can't do anything yet, wait for ShowWindow */
}
+ xdg_toplevel_set_title(wind->shell_surface.xdg.roleobj.toplevel, title);
}
WAYLAND_wl_display_flush(viddata->display);