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.
This commit is contained in:
Frank Praznik 2022-08-17 14:59:23 -04:00 committed by Sam Lantinga
parent 99e9156ff5
commit 7da74eb5be

View File

@ -2069,26 +2069,25 @@ void Wayland_SetWindowTitle(_THIS, SDL_Window * window)
{ {
SDL_WindowData *wind = window->driverdata; SDL_WindowData *wind = window->driverdata;
SDL_VideoData *viddata = _this->driverdata; SDL_VideoData *viddata = _this->driverdata;
const char *title = window->title ? window->title : "";
if (WINDOW_IS_XDG_POPUP(window)) { if (WINDOW_IS_XDG_POPUP(window)) {
return; return;
} }
if (window->title != NULL) {
#ifdef HAVE_LIBDECOR_H #ifdef HAVE_LIBDECOR_H
if (WINDOW_IS_LIBDECOR(viddata, window)) { if (WINDOW_IS_LIBDECOR(viddata, window)) {
if (wind->shell_surface.libdecor.frame == NULL) { if (wind->shell_surface.libdecor.frame == NULL) {
return; /* Can't do anything yet, wait for ShowWindow */ return; /* Can't do anything yet, wait for ShowWindow */
} }
libdecor_frame_set_title(wind->shell_surface.libdecor.frame, window->title); libdecor_frame_set_title(wind->shell_surface.libdecor.frame, title);
} else } else
#endif #endif
if (viddata->shell.xdg) { if (viddata->shell.xdg) {
if (wind->shell_surface.xdg.roleobj.toplevel == NULL) { if (wind->shell_surface.xdg.roleobj.toplevel == NULL) {
return; /* Can't do anything yet, wait for ShowWindow */ return; /* Can't do anything yet, wait for ShowWindow */
}
xdg_toplevel_set_title(wind->shell_surface.xdg.roleobj.toplevel, window->title);
} }
xdg_toplevel_set_title(wind->shell_surface.xdg.roleobj.toplevel, title);
} }
WAYLAND_wl_display_flush(viddata->display); WAYLAND_wl_display_flush(viddata->display);